1

私は2つのフォームを使用しており、2番目のフォームが表示されたら最初のフォームを無効にします。2番目のフォームを閉じたときに最初のフォームを有効にする方法が見つかりませんでした。パラメータを渡すことは解決策かもしれませんが、もっと簡単な方法があるに違いありません。最初に、2番目のデストラクタで最初のフォームを有効にすることを考えましたが、それはできませんでした。誰か提案がありますか?

4

2 に答える 2

2

前述のように、この特定のケースでは、2番目のフォームを開くためにモーダルダイアログを使用するのがおそらく理にかなっています。

それが当てはまらない場合をカバーするために、受け入れられているベストプラクティスはFormClosing、最初から2番目のフォームのイベントをサブスクライブすることです。イベントハンドラーでは、「自分」を有効にして、他のことを行うことができます。他のフォームが閉じられた結果として実行します。簡単な例を次に示します。

public partial class ParentForm : Form
{
    private void button1_Click(object sender, EventArgs e)
    {
        ChildForm child = new ChildForm();

        child.FormClosing += new FormClosingEventHandler(child_FormClosing);
        Hide();
        child.Show();
    }

    private void child_FormClosing(object sender, FormClosingEventArgs e)
    {
        Show();
    }
}
于 2012-08-13T13:54:26.833 に答える
2

ShowDialog()を使用して2番目のフォームを表示できます-フォームはモーダルとして表示され、最初のフォームは2番目が閉じられるときにのみ有効になります。

将来の問題については、2番目の形式のフィールドで最初のインスタンスを作成し、必要に応じてそのインスタンスを使用できます。たとえば、カスタムコンストラクターを使用できます。

class SecondForm: Form
{
   FirstForm _parentForm;

   public SeconForm(FirstForm form)
   {
      InitializeComponent();
      _parentForm = form;
   }

   void DoSomethingWithParent()
   {
      _parentForm.DoSomesting();
   }
}
于 2012-08-13T13:34:20.870 に答える