1

メインフォームとサブフォームがあります。サブフォームは、メイン フォームの 4 つの異なるフォーム イベントによってアクティブ化され、どのイベントがトリガーされたかに応じて再設計されます。しかし、グローバルブール値を使用してどのイベントがトリガーされたかを判断するのではなく、引数をサブフォームに直接渡す方法はありますか?

ありがとう!

4

1 に答える 1

3

サブフォームに公開メンバーを追加できます。メソッドまたはプロパティのいずれか。例えば

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);
于 2013-03-29T00:41:16.837 に答える