2014-01-15 91 views
0
Form1 { 
     public int VAR; 
     public int PRTY_VAR 
     { 
     get { return VAR; } set { VAR= value; } 
     } 

} 

从窗口2
Form2 
    { 
     private void trackBar2_Scroll(object sender, EventArgs e) 
     { 
      // here, cant access property "PRTY_VAR" 
      Form1.PRTY_VAR= 1 + trackBar2.Value; 

     } 

    } 

着访问PRTY_VAR。我需要改变VAR没有deaclaring访问变量像这样MainForm.property,没有实例化MainForm mf = new MainForm;

在窗体2 MainForm mf = new MainForm;

,因为在声明它不改变的MainForm的varible。 它只更改新创建的MainForm实例的变量(不是真正的MainForm。)

谢谢。 (新的Form1());我玩与Application.Run(新的Form1());在Program.cs中把它公开

回答

2

两个选项:

  1. 传递给Form2,并从那里获得它的MainForm参考。
  2. 使属性在MainForm上保持静态。

我喜欢选项1,因为我不喜欢静态属性左右浮动的只是任何人改变想法。它也可能会引入尴尬的线程问题。但它听起来像选项2更接近你正在寻找。

+0

谢谢添加静态变量访问变量公共静态INT VAR;“这让我从form2访问它。 –

+0

@ blackholeearth0_gmail良好的交易。请注意,如果你把这种模式做得太过分(而且经常这样做),你的代码将变成意大利面条,并且很难调试/维护。你的意思是通过一个refence, – Andrew

+0

; f2.open(本);这是传递参考的东西吗?谢谢。 –

1

打开当你的Form2通过目前的表单实例是这样的:

Form2 f2 = new Form2(); 
f2.open(this); 

然后你可以从Form2:

// Owner represents your main form, we are making cast to access PRTY_VAR property 
((Main_Form)Owner).PRTY_VAR= 1 + trackBar2.Value; 
+0

你简单又好,谢谢 –