我三流

いろいろ自分なりにやってみたことを書いています

C# 時刻入力時、:を省いて入力する

DataGridViewでDBのフィールドへ時刻データを大量に「手入力で」入力する必要に迫られたとき
たとえば"12:34:56"のように入力していて「テンキーだけで入力したい!」と思ったことありませんか?
上記の例だとつまり "123456" と、:(コロン)入力を省いて結果は "12:34:56" と入力したいというわがままです。
そんな要望を満たしてくれたのがこのコード。(ネタ元:MSDN Visual C# フォーラム)

/* その1.ParseExactを使う例 */
private void dataGridViewRecords_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
        {
            if (this.dataGridViewRecords.Columns[e.ColumnIndex].Name == "results")
            {
                if (e != null)
                {
                    if (e.Value != null)
                    {
                        try
                        {
                            string value = e.Value.ToString();
                            e.Value = DateTime.ParseExact(value, "HHmmss", null);
                            e.ParsingApplied = true;
                        }
                        catch (FormatException)
                        {
                            e.ParsingApplied = false;
                        }
                    }
                }
            }
        }
private void dataGridViewRecords_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (this.dataGridViewRecords.Columns[e.ColumnIndex].Name == "results")
            {
                if (e.Value != null)
                {
                    e.Value = ((DateTime)e.Value).ToString("HH:mm:ss");
                }
            }

        }
/* その2.Insertを使う例 */
private void dataGridViewRecords_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
        {
            if (this.dataGridViewRecords.Columns[e.ColumnIndex].Name == "results")
            {
                if (e != null)
                {
                    if (e.Value != null)
                    {
                        try
                        {
                            string value = e.Value.ToString();
                            value = value.Insert(2, ":");
                            value = value.Insert(5, ":");
                            e.Value = DateTime.Parse(value);
                            e.ParsingApplied = true;
                        }
                        catch (FormatException)
                        {
                            e.ParsingApplied = false;
                        }
                    }
                }
            }
        }
private void dataGridViewRecords_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (this.dataGridViewRecords.Columns[e.ColumnIndex].Name == "results")
            {
                if (e.Value != null)
                {
                    e.Value = ((DateTime)e.Value).ToString("HH:mm:ss");
                }
            }

        }