C# MaskedTextBoxにて、エンター移動時にValidatingでキャンセルするとマスクがおかしくなる
- 題名: C# MaskedTextBoxにて、エンター移動時にValidatingでキャンセルするとマスクがおかしくなる
- 著者: hide
- 日時: 2013/06/26 23:59:04
- ID: 31660
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: C# MaskedTextBoxにて、エンター移動時にValidatingでキャンセルするとマスクがおかしくなる
- 著者: shu
- 日時: 2013/06/27 10:54:49
- ID: 31662
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: C# MaskedTextBoxにて、エンター移動時にValidatingでキャンセルするとマスクがおかしくなる
- 著者: hide
- 日時: 2013/06/27 20:36:53
- ID: 31666
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: C# MaskedTextBoxにて、エンター移動時にValidatingでキャンセルするとマスクがおかしくなる
- 著者: shu
- 日時: 2013/06/27 22:42:07
- ID: 31667
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: C# MaskedTextBoxにて、エンター移動時にValidatingでキャンセルするとマスクがおかしくなる
- 著者: じゃんぬねっと
- 日時: 2013/06/28 1:43:43
- ID: 31669
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
お世話になります。
WindowsXP、VisualStudio2008 C#を使用しています。
formにMaskedTextBoxコントロールを2つ貼りつけた状態で、下記ソースを実行します。
---------------------------------------------------------------------------------------
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
maskedTextBox1.Mask = "0000/00/00";
maskedTextBox2.Mask = "0000/00/00";
maskedTextBox1.KeyDown += new KeyEventHandler(maskedTextBox1_KeyDown);
maskedTextBox1.Validating += new CancelEventHandler(maskedTextBox1_Validating);
}
void maskedTextBox1_Validating(object sender, CancelEventArgs e) {
MessageBox.Show("CHECK!");
e.Cancel = true;
}
void maskedTextBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Enter) {
SelectNextControl(maskedTextBox1, true, true, true, false);
e.Handled = true;
}
}
}
---------------------------------------------------------------------------------------
すると、1つめのコントロールでエンターを押して「CHECK!」が表示された後に、
キーを押すとマスク表示がおかしくなります。
(例:1キーを押すと、1____/__/__ 本当は 1___/__/__)
この状態で更にキーを押すと1回目に入力した文字が消えてしまいます。
(例:2キーを押すと、_2__/__/__ 本当は 12__/__/__)
修正方法・回避方法をご存じの方がいれば、教えて頂けないでしょうか。
試行錯誤した結果、下記事項は判明しています。
・MessageBox.Showしなければ問題なし。
・TABで移動すると問題なし。
SelectNextControlをSendKeys.SendWait("{TAB}")はダメ。
・全選択してDELキーを押した後だと、問題なし。
SelectAll後にSendKeys.SendWait("{DEL}")はダメ。
・VisualStudio2010でも同様。