C#两个独立窗体中按钮的状态转换
两个独立窗体中各有一个按钮,按下一个窗体的按钮能改变另一个窗体中按钮的状态。(窗体必须保持为原来的窗体).本人是菜鸟,请各位大大附上代码。谢谢!
------解决方案--------------------在一个窗体中放入2个UserControl,控制Show/Hide
------解决方案--------------------可以通过加 公共变量 和 公共方法,例:
static class Program
{ //公共变量
public static Form1 fm1; //窗体1
public static Form2 fm2; //窗体2
static void Main()
{ //省略程序启动代码...}
}
窗体Form1中公共方法: //在这里改成你自己需要的功能
public void ChangeButton(bool bEnabled)
{
this.button1.Enabled = bEnabled;
}
private void frmMain_Load(object sender, EventArgs e)
{ //Form1初始
fm1 = this;
}
private void button1_Click(object sender, EventArgs e)
{ //Form1按钮事件,这个达到目的,改了Form2的button状态
if (fm2 != null)
fm2.ChangeButton(true);
}
窗体Form2中公共方法: ////在这里改成你自己需要的功能
public void ChangeButton(bool bEnabled)
{
this.button2.Enabled = bEnabled;
}
private void frmMain_Load(object sender, EventArgs e)
{ //Form2初始
fm2 = this;
}
private void button2_Click(object sender, EventArgs e)
{ //Form2按钮事件,这个达到目的,改了Form1的button状态
if (fm1 != null)
fm1.ChangeButton(true);
}
------解决方案--------------------放入2个UserControl,控制Show/Hide
------解决方案--------------------上面的代码 公共变量 使用漏了静态类,都要改为Program.fm1 和 Program.fm2,如
fm1 = this;
改为:
Program.fm1 = this;
你运行就会提示了,我在几个工具经常切换忘了,^_^
------解决方案--------------------通过某个类进行关联
要么一个窗口打开另一个 并把自己当做参数传过去 也能达到这个效果
------解决方案--------------------
两位不睡觉吗?
改变按钮的状态是什么意思?是按钮对应的函数被执行了还是什么?
这个首先要在一个窗口中获取另外一个窗口对象。
如果只是要实现这个功能的话,建议你用mdi来做,就是把一个作为子窗口,另一个作为父窗口。
在Form1的属性中窗口样式里面把ismdicontener设置为true。
添加一个Button button1
C# code
public partial class Form1 : Form
{
Form2 f2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f22 =(Form2) this.MdiChildren[0];
f22.SetButton();
}
private void Form1_Load(object sender, EventArgs e)
{
f2 = new Form2();
f2.MdiParent = this;
//f2.WindowState = FormWindowState.Maximized;
f2.Show();
}
public void SetButton()
{
button1.Text = "fuck";
}
}
------解决方案--------------------
然后是不用mdi的情况
还是先新建一个窗体Form2
关键是要让Form2中知道Form1.在Form2中声明一个Form1类型的全局变量f1.
修改Form2的构造函数,增加一个Form1类型的参数,这样当Form1中创建Form2时,Form2就能得到Form1的信息。
还要在Form1中添加一个Form2类型的全局变量。
Form1中的代码:
C# code
public partial class Form1 : Form
{
Form2 f2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
f2.SetButton();
}
private void Form1_Load(object sender, EventArgs e)
{
f2 = new Form2(this);
f2.Show();
}
public void SetButton()
{
button1.Text = "fuck";
}
}
------解决方案--------------------
private void Form1_Load(object sender, EventArgs e)
这个函数是在Form1的事件中添加的,不要忘了添加这个事件