2016-07-21 9 views
2

モードレスフォームの2番目のフォーム(Form2)がロードされたときにプライマリフォームのボタン(button3)を無効にしてから、モードレスフォームが閉じられたとき。フォームがロードされたときにボタンを無効にしてフォームが閉じられたときに有効にする

private void button3_Click(object sender, EventArgs e) 
{ 
    Form2 p = new Form2(label1.Text); 
    p.Show(); 

    if (p.Shown) 
     this.button3.Click += new System.EventHandler(this.button3_Click); 
    else 
     this.button3.Click -= new System.EventHandler(this.button3_Click); 
} 
+0

button3.Enabled =偽;同じフォームの場合は動作するはずですか? – jsls

+0

ええ、button3はform1にあります。私はform2を読み込んでからボタン3を消したいと思っています。そして、私はfrom2を閉じるときにform1のbutton3を有効にしたいと思っています:( – xxxXXX

答えて

2

Form2を示し、そしてForm2FormClosedイベントを使用する前button3を無効にするだろう、これを達成するための最善の方法は、フォーム一度button3を再度有効にする:ここで

は、私が試したものです閉じている:

public partial class Form1 : Form 
{ 
    ... 

    private void button3_Click(object sender, EventArgs e) 
    { 
     // Instantiate the form and assign the FormClosed event 
     var form = new Form2(label1.Text); 
     form.FormClosed += Form2_FormClosed; 

     // Disable button3 
     button3.Enabled = false; 

     // Show the form 
     form.Show(); 
    } 

    // Occurs when Form2 is closed 
    private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     // Re-enable button3 
     button3.Enabled = true; 
    } 
} 
FormClosed

イベントにラムダ式を割り当てる代替方法:

private void button3_Click(object sender, EventArgs e) 
{ 
    // Instantiate the form 
    var form = new Form2(label1.Text); 

    // Assign a lambda method to the FormClosed event to re-enable button3 
    form.FormClosed += (s, a) => button3.Enabled = true; 

    // Disable button3 
    button3.Enabled = false; 

    // Show the form 
    form.Show(); 
} 
+0

よくForm3にbutton3があります – xxxXXX

+0

上記のメソッドがForm1であることを明確にするために答えを更新しました。 。何のコードが動作していません。.. するvarフォーム=新しいForm2のを()Form2' 'に追加する必要がありません –

+0

;。 Form2のは... – xxxXXX

0

似たようなことをしましたが、私はあなたがしたいことを理解していませんが、おそらくそれはあなたを助けるでしょう。

public partial class Form2 : Form 
{ 
private void button3_Click(object sender, EventArgs e) 
{ 
    Button3.Enabled = false; 
    Form2 p = new Form2(label1.Text); 

    p.ShowDialog(); 


    //the code will stop here until you finish your work on form2 

    Button3.Enabled=true; 
} 

私と一緒に動作します。

しかし、あなたがたForm3わずかラベル使用の場合:

Button3.Enabled= false; 
MessageBox.show ("blabla"); 
Button3.Enabled=true; 
+0

2番目のフォームをモーダルダイアログにすることで、2番目のフォームが閉じられるまで対話できないため、ボタンを無効にする必要がなくなります。私は疑問は、モードレスダイアログの場合について具体的に質問していると思います。 –

+0

ありがとうございました!出来た! – xxxXXX

+0

答えを有効にして:) – jsls

関連する問題