- - PR -
カスタムコントロールからボタンクリックイベントを実行したい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-05-07 00:23
初投稿になります。
困っている問題があり、ご相談させていただきました。 VisualStudio2005, VBで開発をしていますが以下の内容を実現するために テキストボックスを拡張したカスタムコントロール(別プロジェクト)を作成し、 以下の共通化を図ろうと考えました。 @ Enterキーで指定したコントロールに遷移する A Enterキーで指定したボタンのクリックを実行 @は、実現できましたが、Aがどうしても実現できません。 良い方法がありましたら、ご教授お願いします。 [拡張テキストボックス(AdvTextBox)] Public Class AdvTextBox '*** Enter時のアクション指定 *** Public Enum eEnterAction As Integer NextFoucus = 0 'フォーカス移動 Click = 1 '実行 End Enum Private _EnterAction As Integer Public Property EnterAction() As eEnterAction Get Return _EnterAction End Get Set(ByVal value As eEnterAction) _EnterAction = value End Set End Property '*** アクション時のコントロール指定 *** Private _NextControl As Control Public Property NextControl() As Control Get Return _NextControl End Get Set(ByVal value As Control) 'テキストボックス・コンボボックス・ボタン以外は無効へ If value.GetType Is GetType(TextBox) Or _ value.GetType Is GetType(AdvTextBox) Or _ value.GetType Is GetType(ComboBox) Or _ value.GetType Is GetType(Button) Then _NextControl = value Else _NextControl = Nothing End If End Set End Property '*** Enterアクションロジック *** Private Sub AdvTextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 'Enter以外は無効 If e.KeyCode = Keys.Enter Then 'Enter時のアクションで制御を判断 Select Case _EnterAction Case eEnterAction.NextFoucus 'フォーカス移動 If _NextControl Is Nothing Then Exit Sub Else _NextControl.Focus() End If Case eEnterAction.Click 'Click '@@@ここでクリックイベントを呼び出したい @@@ _NextControl.Click() <-- 『エラーになる』 End Select End If End Sub '*** コンストラクタ *** Public Sub New() 'プロパティの初期化 _EnterAction = Nothing _NextControl = Nothing End Sub End Class [フォーム] Public Class frmMain '*** フォーム内のボタンクリックイベント *** Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("ボタンがクリックされました", "クリック", MessageBoxButtons.OK) End Sub End Class | ||||
|
投稿日時: 2007-05-07 01:04
ButtonならPerformClickがありますよ
| ||||
|
投稿日時: 2007-05-07 09:15
Form で管理すべき機能のような気がしないまでもないですね。 Action は Action 用のコンポーネントを Form に参加させ管理させます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-05-20 16:51
返信、大変遅くなりました。
Kazukiさんのご返信の通り、PerformClickを使用することで実現しました。 ありがとうございました。 じゃんぬねっと様へ ご回答ありがとうございます。 実現したかった内容は、たくさんのテキストボックスの画面上があり テキストボックス毎にイベントを記述するよりもデザイン時に移動先を 決定できたほうが使いやすいと思いました。 また、最終テキストボックスの場合はEnter時に自動的に検索処理を行いたいと思い、 ボタンのクリックイベントを実行すればよいのでは?と考えた次第です TabIndex,SelectNextControlなどでフォーカスの移動は実現できそうですが ボタンクリックイベントを実装できるならついでに、フォーカス移動も指定してしまえ...と
上記の部分が私には、理解できませんでした。 簡単なサンプルで結構ですので、ご教授をお願いできないでしょうか? | ||||
|
投稿日時: 2007-05-20 18:44
.NETだとToolTipとかがコンポーネントにあたるわけだがイメージわかない?
コントロール以外のUIを持たないコンポーネントとか使ったことないの? |
1