如何在A窗体中设置B窗体上的BUTTON的Enabled属性?目前实现方法为:
在A窗体中新建一个public方法,此方法用来设置BUTTON的Enabled属性.
public void SetEnabled(bool b)
{
button1.Enabled = b;
} 在B窗体调用A窗体中SetEnabled方法:
A a = new A();
a.SetEnabled(false);
但是此方法不成功!
在A窗体中新建一个public方法,此方法用来设置BUTTON的Enabled属性.
public void SetEnabled(bool b)
{
button1.Enabled = b;
} 在B窗体调用A窗体中SetEnabled方法:
A a = new A();
a.SetEnabled(false);
但是此方法不成功!
A 上改B.BUTTONname.Enabled=true
在A窗体中新建一个public方法,此方法用来设置BUTTON的Enabled属性.
public void SetEnabled(bool b)
{
button1.Enabled = b;
}
在显示B的时候这样显示:
FormB fromB = new FormB();
fromB.Show(this);
在B窗体调用A窗体中SetEnabled方法:
FormA formA = (FormA)this.Owner;
formA.SetEnabled(true);
2.如果A和B不是父子窗口关系,则可以使用委托:
在FormA中定义委托类型,和方法:
public delegate void SetEnableCallback(bool value);
public void SetEnabled(bool b)
{
button1.Enabled = b;
}
在Form B中定义委托变量:
internal Form2.SetEnableCallback SetEnable;
显示时:
FormA fromA = new FormA();
FormB formB = new FormB(); formB.SetEnable += new FormA.SetEnableCallback(fromB.SetEnabled); fromA.Show();
formB.Show();在B窗体调用A窗体中SetEnabled方法:
this.SetEnable(true);
{
Form2 frm = new Form2();
frm.button1.Enabled =b;
}
然后在主窗体构造函数中,给静态成员初始化,如下: pCurrentWin = this;
那么在子窗体中调用父窗体,可以通过“主窗体类名. pCurrentWin”来操作当前的主窗体。
第二种,是在子窗体中定义一个私有成员,来保存当前主窗体对象,例如: private yourMainWindow pParentWin = null; 然后在子窗体构造函数中,加一参数,如下: public yourChildWindow( yourMainWindow WinMain ) { pParentWin = WinMain; //Other code} 在主窗体创建子窗体的时候,要把this作为参数来构造子窗体,这样在子窗体中调用父窗体,可以直接用“this.pParentWin”就可以了
不过以上所作的,只是让你能够访问当前主窗体对象,那么如何操作控件,很多人直接修改控件的成员访问符,即把“private”改为“public”,我觉得这样破坏了本身类的封装,所以我比较喜欢的做法是增加公有属性或方法来供调用,例如: public string ButtonText { get{ return btn.Text;} set{ btn.Text = value;} }
public void Button_Click() { this.btnDConvert.PerformClick();//Execute button click }
;
在b窗口放一个timer控件
在timer的tick事件中写
this.button1.enabled = this.tag;
在a窗口让b窗口button enable的代码这样写:
b.tag =true