DOBON.NET DOBON.NETプログラミング掲示板過去ログ

他のコントロールのイベントの発生方法

環境/言語:[VB.NET]
分類:[.NET]

VB.NET WindowsXP で開発しております。
テキストボックスとコンボボックスが存在し、コンボボックスから選択時に
テキストボックスに、その値をセットしていますが、
その際にテキストボックスのKeyDownイベントを発生させたいのですが、どう
してもわかりません。

※KeyDownにHandleされているプログラムを直接呼び出さずに、イベントを
発生させれる良い方法があれば便利なのですが。

よろしくお願いします。
System.Windows.Forms.TextBoxにはKeyDownイベントを発生させるOnKeyDownというメソッドがあります。
しかし、このメソッドのアクセス修飾子はprotected(VBではFriendだったかな?)なので、外部からは呼び出せません。
System.Windows.Forms.TextBoxをラップしたクラスを作成して、OnKeyDownを外部から呼び出せるようにします。

具体的には、System.Windows.Forms.TextBoxクラスを継承したユーザコントロールを作成して、
new public void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
{
  base.OnKeyDown(e);
}
といったメソッドを追加します。(上記はC#ですので、VBに翻訳してください)

ただ、この方法だとコントロールを貼り直さないといけないですが。
返答ありがとうございます。
コントロールの張り替えの必要のないやりかたがあれば良いのですが、
初心者なものでさっぱりわかりません。
■No5547に返信(イニさんの記事)
> 返答ありがとうございます。
> コントロールの張り替えの必要のないやりかたがあれば良いのですが、
> 初心者なものでさっぱりわかりません。

TextBoxを継承したユーザーコントロールクラスを張り替えるだけなら、置換コマンドだけで可能ですよ。
例えば、デザインで配置したテキストボックスは、
Friend WithEvents txtTest1 As System.Windows.Forms.TextBox
といった感じで、フォーム デザイナが「System.Windows.Forms.TextBox」の部分を自動生成してくれます。これを利用して、「System.Windows.Forms.TextBox」を置換前キーワードにして、置換後キーワードに「(ユーザーコントロールのクラス名)」を入れて置換え実行したらOKです。万が一を考えて、バックアップをしておき、フォーム毎で置換実行をするといいでしょう。
ちなみに、置換ダイアログには、検索条件を指定する事が可能なので、フォーム毎なら「現在のドキュメント」、プロジェクト内のドキュメント全てが対象なら「現在のプロジェクト」というふうにできますので、かなり便利です。
あと、TextBoxを継承したユーザーコントロールのサンプルが必要なら、私のサイトにありますので、参考にしてみてください。
> テキストボックスとコンボボックスが存在し、コンボボックスから選択時に
> テキストボックスに、その値をセットしていますが、
> その際にテキストボックスのKeyDownイベントを発生させたいのですが、どう
> してもわかりません。

イベントは"発生する"ものであって、
別のオブジェクトから発生させるものではありません。

> ※KeyDownにHandleされているプログラムを直接呼び出さずに、イベントを
> 発生させれる良い方法があれば便利なのですが。

発想を変えて、
KeyDownイベントで処理する内容をメソッド化しておき、
KeyDownイベントからとコンボボックスの選択時イベントから
そのメソッドを呼び出してはどうでしょうか。

DOBON.NET | プログラミング道 | プログラミング掲示板