- PR -

カスタムコントロールからボタンクリックイベントを実行したい

1
投稿者投稿内容
KBR
会議室デビュー日: 2007/05/06
投稿数: 3
お住まい・勤務地: 大阪
投稿日時: 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
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2007-05-07 01:04
ButtonならPerformClickがありますよ
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-05-07 09:15
引用:

KBRさんの書き込み (2007-05-07 00:23) より:

VisualStudio2005, VBで開発をしていますが以下の内容を実現するために
テキストボックスを拡張したカスタムコントロール(別プロジェクト)を作成し、
以下の共通化を図ろうと考えました。
(1) Enterキーで指定したコントロールに遷移する
(2) Enterキーで指定したボタンのクリックを実行


Form で管理すべき機能のような気がしないまでもないですね。
Action は Action 用のコンポーネントを Form に参加させ管理させます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KBR
会議室デビュー日: 2007/05/06
投稿数: 3
お住まい・勤務地: 大阪
投稿日時: 2007-05-20 16:51
返信、大変遅くなりました。
Kazukiさんのご返信の通り、PerformClickを使用することで実現しました。
ありがとうございました。

じゃんぬねっと様へ
ご回答ありがとうございます。

実現したかった内容は、たくさんのテキストボックスの画面上があり
テキストボックス毎にイベントを記述するよりもデザイン時に移動先を
決定できたほうが使いやすいと思いました。

また、最終テキストボックスの場合はEnter時に自動的に検索処理を行いたいと思い、
ボタンのクリックイベントを実行すればよいのでは?と考えた次第です

TabIndex,SelectNextControlなどでフォーカスの移動は実現できそうですが
ボタンクリックイベントを実装できるならついでに、フォーカス移動も指定してしまえ...と

引用:

Action は Action 用のコンポーネントを Form に参加させ管理させます。


上記の部分が私には、理解できませんでした。
簡単なサンプルで結構ですので、ご教授をお願いできないでしょうか?
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-05-20 18:44
.NETだとToolTipとかがコンポーネントにあたるわけだがイメージわかない?
コントロール以外のUIを持たないコンポーネントとか使ったことないの?
1

スキルアップ/キャリアアップ(JOB@IT)