- 題名: DataGridView列カスタムのOnLeaveでText変更
- 日時: 2012/03/23 13:50:55
- ID: 30138
- この記事の返信元:
- (なし)
- この記事への返信:
- [30141] Re[1]: DataGridView列カスタムのOnLeaveでText変更2012/03/24 20:23:33
- [30151] Re[1]: DataGridView列カスタムのOnLeaveでText変更2012/03/27 11:52:36
- ツリーを表示
■No30151に返信(kikuさんの記事)
> OnLeaveイベントが発生した後に、
> 別のタイミングで上書きされるということは考えられないでしょうか?
返信ありがとうございます。
最小のソースで再度確認したところ、原因がわかりました。
イベントの発生順番の問題でした。
コンボボックスを入力可能にするためにDataGridView_CellValidating
イベントにて、入力値がコンボのリストになければItems.Addする
としています。
if (this.Columns[e.ColumnIndex] is TestColumn)
{
TestColumn cbc = (TestColumn)this.Columns[e.ColumnIndex];
if (cbc.Items.Contains(e.FormattedValue) == false)
{
//コンボになければ設定する
cbc.Items.Add(e.FormattedValue);
}
//セルの値を設定
this[e.ColumnIndex, e.RowIndex].Value = e.FormattedValue;
}
}
マウスクリックの場合、以下のようにイベントが発生します、、、
DataGridViewComboBoxEditingControl_OnLeave
↓
DataGridView_CellValidating
↓
DataGridViewComboBoxEditingControl_OnLeave
TABキーの場合、以下のようにイベントが発生します、、、
DataGridView_CellValidating
↓
DataGridViewComboBoxEditingControl_OnLeave
原因がわかりましたので対策を考えてみます。
ありがとうございました。
分類:[.NET]
C#3.5でWindowsアプリを作成しています。 DataGridViewで入力可能なコンボボックス列を作成しよう としています。その機能の一つとして入力後の値を整形しよう としているのですが、整形後の値になってくれません。 DataGridViewComboBoxEditingControlのカスタムクラスで OnLeaveをオーバーライドして値を整形しています。 テスト用に以下のように強制的にテキストを変更していますが… マウスクリックによりフォーカスを移すと正常に整形されます、 TABキーによりフォーカスを移すと整形前の値になります。 protected override void OnLeave(EventArgs pe) { this.Text = "aaa"; base.OnLeave(pe); } TABキーによる移動だとなぜダメなのかわかりません。 IsInputKeyイベントでTAB判定して行えば可能なのかもしれません がOnLeaveでできるなら そのほうが良いかと思いまして質問しました。 対策をご教授いただけると助かります。 よろしくお願いします。