2013-03-17 29 views
0

我一直在寻找这个特定问题的解决方案几个小时。所以,你种的#1人是我的最后一招在Form2.Disposed事件中更改Form1.Checkbox状态

这里是我到目前为止已经完成


这是Form2.cs

public partial class Form2 : Form 
{ 
    Form1 newForm1; 

    public Form2() 
    { 
     InitializeComponent(); 

    } 
    private void Form2_Disposed(object sender, EventArgs e) 
    { 
     newForm1 = new Form1(); 
     newForm1.CheckBox1_Checked = false; 
    } 

这是窗体2 .Designer.cs

partial class Form2 
{ 
    .... 
private void InitializeComponent() 
    { 
     .... 
     this.Disposed += new System.EventHandler(this.Form2_Disposed); 
     .... 
    } 
    .... 
} 

这是在Form1.cs

public partial class Form1 : Form 
{ 
    .... 
    public bool CheckBox1_Checked 
    { 
     get { return checkBox1.Checked; } 
     set { checkBox1.Checked = value; } 
    } 
    .... 
} 

所以,当我关闭窗体2(与X)的程序经过Disposed事件,但不会改变该复选框的状态。

我也试图让Form1.Checkbox1控制公共和直接访问它(我的意思是不使用访问器,但仍没有运气。

我怀疑newForm1是在Form1的副本。 但我不知道该怎么告诉“newForm1”是非常“Form1的”对象

任何帮助,将不胜感激

+0

Form1中已经打开? – KF2 2013-03-17 14:36:24

+0

是@irsog form1已经打开 – Iorgov 2013-03-17 15:29:28

回答

0

如果Form1中已经打开,你可以这样做:(而不是使用Dispose使用关闭事件) Form1.cs的

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      _Form1 = this; 
     } 
     public static Form1 _Form1; 

     public CheckBox chk { get { return checkBox1; } } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Form2 gg = new Form2(); 
      gg.ShowDialog(); 
     } 

    } 

Form2.cs

public partial class Form2 : Form 
    { 

     public Form2() 
     { 
      InitializeComponent(); 
      this.FormClosed += new FormClosedEventHandler(Form2_FormClosed); 
     } 

     void Form2_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      Form1._Form1.chk.Checked = false; 
     } 

    } 
0
public partial class Form1 : Form 
{ 
    public static Form1Instance; 
    ... 

    Form1.OnLoad(...) 
    { 
     Form1Instance=this; 
    } 
} 

//now call using static variable 
Form1.Form1Instance.CheckBox1_Checked=true; 
+0

你最好在Form2.OnClose()中调用它,而不是Form2.Dispose(); – David 2013-03-17 14:33:40

+0

感谢@David从现在开始,你是我个人的上帝。 今晚我要为你的荣誉牺牲一杯啤酒:D – Iorgov 2013-03-17 15:27:57