メインフォームとサブフォームがあります。サブフォームは、メイン フォームの 4 つの異なるフォーム イベントによってアクティブ化され、どのイベントがトリガーされたかに応じて再設計されます。しかし、グローバルブール値を使用してどのイベントがトリガーされたかを判断するのではなく、引数をサブフォームに直接渡す方法はありますか?
ありがとう!
サブフォームに公開メンバーを追加できます。メソッドまたはプロパティのいずれか。例えば
public void ProcessEvent(int eventNumber)
{
switch (eventNumber) {
case 1:
// Process event #1
break;
case 2:
// Process event #2
break;
case 3:
// Process event #3
break;
case 4:
// Process event #4
break;
}
}
メイン フォームでは、次のように呼び出します。
mySubform.ProcessEvent(1);
(注: WinForms では、サブフォームではなく を使用しますUserControl
。)
または、サブフォームのプロパティで:
public int EventNumber { get; set; }
メイン フォームでは、次のように設定します。
mySubform.EventNumber = 1;
サブフォームでは、このように簡単にアクセスできます
if (EventNumber == 1) { ... }
注: フォーム、サブフォーム、およびコントロールは単なるクラスであり、「通常の」クラスでできることはすべてそれらで行うことができます。
アップデート
あなたのコメントの1つによると、サブフォームではなくダイアログフォームを使用しています。別のフォーム (上ではない) に配置されたフォーム (UserControl または MDI フォーム) をサブフォームとして呼び出します。次のように呼び出します。
var fldg = new MyDialogForm{ EventNumber = 1 }; // Using the property described above.
fdlg.ShowDialog(this);
さらに別のオプションは、サブフォームのコンストラクターに引数を渡すことです
private int _eventNumber;
public MyDialogForm(int eventNumber) // Constructor
{
_eventNumber = eventNumber;
}
そして、あなたはそれを次のように呼びます:
var fldg = new MyDialogForm(1); // Pass the argument to the constructor.
fdlg.ShowDialog(this);