2 つの DataGridView を持つ .NET 3.5 をターゲットとする C# WinForms プロジェクトがあります。Win 7 64 ビットの Visual Studio 2010 Pro。
実行時に作成された 2 つの DateTimePicker コントロール (時刻用と日付用) を使用しています。これらは、グリッドビューの適切な DateTime セルの上に浮かんでいます。ピッカーは、時刻または日付のセルがフォーカスされたときにのみ表示されます。
システム時刻の形式は 24 時間です。
private DateTimePicker timePicker;
timePicker = new DateTimePicker();
timePicker.Format = DateTimePickerFormat.Custom;
timePicker.CustomFormat = "HH:mm";
timePicker.MaxDate = new DateTime(9998, 12, 31);
timePicker.MinDate = new DateTime(1753, 01, 01);
timePicker.ShowUpDown = true;
timePicker.Width = 60;
timePicker.Hide();
timePicker.ValueChanged += new EventHandler(timePicker_ValueChanged);
timePicker.KeyPress += new KeyPressEventHandler(timePicker_KeyPress);
timePicker.LostFocus += new EventHandler(timePicker_LostFocus);
dgTxSummary.Controls.Add(timePicker);
void timePicker_ValueChanged(object sender, EventArgs e)
{
// dgTxSummary is the DataGridView containing the dates and times
dgTxSummary.CurrentCell.Value = timePicker.Value;
}
void timePicker_LostFocus(object sender, EventArgs e)
{
timePicker.Hide();
}
// Used for debugging; shows a message in a text field when 10, 20 etc
// where entered
void timePicker_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsDigit(prevChar) && e.KeyChar == '0')
{
string correctHour = prevChar.ToString() + '0';
Message = "Should have been " + correctHour;
}
prevChar = e.KeyChar;
}
時間セルをクリックすると、タイムピッカーが表示されます
private void ShowTimePicker(Point cellPos, DateTime dt)
{
timePicker.Location = cellPos;
timePicker.Value = dt;
timePicker.Show();
timePicker.Focus();
}
この問題は、次の 2 つの条件が満たされた場合にのみ発生します。
1) ピッカーがフォーカスを得た後に最初に数値が入力されたとき
2) 0* で終わる有効な数値が手動で入力された (キーボード)
※時は0、10、20、分は0、10、…、50
アップダウン ボタンを使用すると正常に動作します。
その結果、最初に前の時刻または日付が表示され、アップダウン ボタンが消え、コントロール (タイムピッカー) が非表示または閉じられ、datagridview 内の基になるセルにフォーカスがあり、前の時刻または日付で編集モードになります。セルの内側または外側をクリックすると、10 が入力された場合は 01 が表示されます。
同じフォームでデザインタイムの datetimepicker を作成しましたが、正常に動作します。
私は何が欠けていますか?