###前提・実現したいこと
TextBox.KeyPress イベントに指定するメソッド内部で、
事前に作成したオブジェクトを利用したい。
###該当のソースコード
c#
1private void EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { 2 3 TextBox tb = (DataGridViewTextBoxEditingControl)e.Control; 4 // 5 // 6 // ここで生成したオブジェクトを、MyKeyPress内で利用したい 7 // このオブジェクトは列毎・画面毎に設定する内容が変わります。 8 Foo foo = new Foo(); 9 foo.Length = 5; 10 foo.Scale = 3; 11 12 // イベントは削除できるが、Fooオブジェクトを利用する方法がわからない 13 tb.KeyPress -= new KeyPressEventHandler(MyKeyPress); 14 tb.KeyPress += new KeyPressEventHandler(MyKeyPress); 15 16 // これではイベントが消えないが、Fooオブジェクト自体は利用できた 17 tb.KeyPress -= createHandler(foo); 18 tb.KeyPress += createHandler(foo); 19} 20 21private void MyKeyPress(object sender, KeyPressEventArgs e) { 22 int len = foo.Length; 23 int scale = foo.Scale; 24} 25 26public KeyPressEventHandler createHandler(Foo foo) { 27 return (sender, e) => { 28 int len = foo.Length; 29 int scale = foo.Scale; 30 }; 31} 32
###試したこと
ユーティリティクラスに、引数Fooを取るKeyPressEventHandlerを返すメソッドを作成しましたが、
その方法では イベントの削除が出来ませんでした。
###補足情報
DataGridView内のセル編集時に、数値・小数の列を編集する場合に、
文字入力不可・指定桁数を超えた入力不可とする処理を作成しています。
小数列の場合は整数部Length桁、小数部Scale桁として定義し、
KeyPress時にその桁数を超える場合は入力を無視させます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/13 00:20
2016/07/13 00:40
2016/07/13 02:10
2016/07/13 02:23
2016/07/13 02:54