■No102139 (ぴよ さん) に返信 > Form2にTestがあれば、Test内で処理 > TestがなければForm1のOnMouseDown内でValueにセットしたいのです。 イベント MyEvent にハンドラがアタッチされてなければ Form1 の OnMouseDown メソッドで 処理を行い、ハンドラ Test がアタッチされていればそのハンドラで処理を行いたいのだと 理解しました。 その理解で合っているのであれば、イベントを使うのは、XY 問題とまでは言えないものの、 適切ではないと思います。 デリゲートを使ってはいかがですか? 質問者さんのコードを動くように直して(動かないコードを貼るのは止めましょう)、イベ ントに代えてデリゲートを使って書き直すと以下のようになります。下のコードでは Action がデリゲートです。 using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public Action p; protected override void OnMouseDown(MouseEventArgs e) { if (p != null) { // デリゲートのポイントするメソッドで処理 p(); } else { MessageBox.Show("Form1 の OnMouseDown で処理"); } base.OnMouseDown(e); } } } using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form2 : Form { public Form1 frm1 = new Form1(); public Form2() { InitializeComponent(); frm1.TopLevel = false; frm1.Height = 100; frm1.Width = 100; frm1.Visible = true; this.Controls.Add(frm1); // 以下の設定で Test メソッドで処理される // コメントアウトすれば From1 の OnMouseDown で処理 frm1.p = new Action(Test); } public void Test() { MessageBox.Show("Form2 の Test メソッドで処理"); } } } デリゲートの方が目的に合っているし、上のコードであれば C# ⇒ VB.NET 変換サービスで変換し たコードをほぼそのまま使えますので、「VBでのイベント発生方法は RaiseEventと書いているの しか見つからず困っています」とかで悩むこともないです。 例えば、上のコードを以下の変換サービスで変換したコードを、 Telerik Code Converter https://converter.telerik.com/ ほぼそのまま使って以下のようにできます。 Public Class Form1 Public Sub New() InitializeComponent() End Sub Public p As Action Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs) If p IsNot Nothing Then p() Else MessageBox.Show("Form1 の OnMouseDown で処理") End If MyBase.OnMouseDown(e) End Sub End Class Public Class Form2 Public frm1 As Form1 = New Form1() Public Sub New() InitializeComponent() frm1.TopLevel = False frm1.Height = 100 frm1.Width = 100 frm1.Visible = True Me.Controls.Add(frm1) '以下の設定で Test メソッドで処理される 'コメントアウトすれば From2 の OnMouseDown で処理 'frm1.p = New Action(AddressOf Test) End Sub Public Sub Test() MessageBox.Show("Form2 の Test メソッドで処理") End Sub End Class
- Child Tree -