VisualStudio2019にて、Windowsアプリケーションを開発しています。
そこで、ユーザーコントロールの知識が必要になり勉強している最中です。
Get_Eventという名前でユーザーコントロールを作成し、テキストボックスを3つ置きました。
Form1側にGet_EventとTextBox1を配置しました。
Get_Event内のテキストボックスがFocusされた時にEventを発生し、
TextBox1にどのテキストボックスがFocusされているかとテキストボックスの内容をTextBox1に表示したいです。
VB.NET
1Public Event BoxClick(ByVal sender As Control, ByVal e As System.EventArgs) 2 3Private Sub cbox_Click(ByVal sender As Object, ByVal e As System.EventArgs) 4 RaiseEvent BoxClick(sender, e) 5End Sub
よろしくお願い申し上げます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/10 02:23
回答3件
0
ベストアンサー
サンプル投下します。
ユーザーコントロールのコード
VB
1<System.ComponentModel.DefaultEvent("BoxClick")> 2Public Class Get_Event 3 4 Protected Overrides Sub OnLoad(e As EventArgs) 5 MyBase.OnLoad(e) 6 For Each ctrl As Control In Me.Controls 7 AddHandler ctrl.Enter, AddressOf ctrl_Enter 8 Next 9 End Sub 10 11 Private Sub ctrl_Enter(ByVal sender As Object, ByVal e As EventArgs) 12 RaiseEvent BoxClick(Me, New BoxClickEventArgs(DirectCast(sender, Control))) 13 End Sub 14 15 Public Event BoxClick(ByVal sender As Control, ByVal e As BoxClickEventArgs) 16 17End Class 18 19Public Class BoxClickEventArgs 20 Inherits EventArgs 21 22 Public ReadOnly Property Current As Control 23 24 Public Sub New(ctrl As Control) 25 Me.Current = ctrl 26 End Sub 27 28End Class
使い方
VB
1Public Class Form1 2 3 Private Sub Get_Event1_BoxClick(sender As Control, e As BoxClickEventArgs) Handles Get_Event1.BoxClick 4 TextBox1.Lines = New String() {"Focus:" & e.Current.Name, "Text :" & e.Current.Text} 5 End Sub 6 7End Class
投稿2019/12/10 05:05
総合スコア2707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/10 05:38
2019/12/10 06:08
2019/12/10 06:30
2019/12/10 06:49
2019/12/10 06:51
2019/12/10 08:19
2019/12/10 08:23
2019/12/10 08:36
2019/12/10 08:53
2019/12/10 09:04
2019/12/11 01:51
2019/12/11 02:18
2019/12/11 03:18
2019/12/11 05:36
2019/12/11 05:41
2019/12/11 06:18
2019/12/11 06:37
2019/12/11 06:52
0
コンポーネントがフォーカスされた、アクティブコントロールになったときは、Enterイベントが発生します
そのときになんやかやすればいいでしょう
投稿2019/12/10 02:25
総合スコア88038
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
イベントでのデータの渡し方が分からないということだと思いましたので、そちらに関して回答します。
VBNET
1Public Event BoxClick(ByVal sender As Control, ByVal e As BoxClickEventArgs) 2 3Public Class BoxClickEventArgs 4 Inherits EventArgs 5 6 Public ReadOnly Property Text As String 7 8 Public Sub New(text As String) 9 Me.Text = text 10 End Sub 11 12End Clas 13 14Private Sub cbox_Click(ByVal sender As Object, ByVal e As System.EventArgs) 15 Dim arg As New BoxClickEventArgs("渡すテキスト") 16 RaiseEvent BoxClick(Me, arg) 17End Sub
上記のように、イベントで渡すデータを格納するためのクラスを作成し、それを渡すようにすればよろしいかと思います。
単純に
VBNET
1Public Event BoxClick(TextBoxName As String,Text As String) 2 3Private Sub cbox_Click(ByVal sender As Object, ByVal e As System.EventArgs) 4 RaiseEvent BoxClick("TextBox名", "中身のテキスト") 5End Sub
という書き方もできます。
しかし、イベント定義の標準的なルールから外れる形になりますのであまりお勧めはしません。
投稿2019/12/10 02:32
編集2019/12/10 03:13総合スコア10469
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/10 02:41
2019/12/10 02:47 編集
2019/12/10 02:52
2019/12/10 03:20
2019/12/10 03:23
2019/12/10 03:31
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。