目前我正在使用手工制作的Messagebox构建:
Communicate between two windows forms in C#
这个解决方案作为我项目的一部分的基础,我发现当我使用这个代码时,它没有立即做出反应:
//Form 1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Framerate = "Test1";
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this);
frm.Show();
label2.Text = Framerate; // this statement is delayed / working too soon
}
public string Framerate
{
get { return label1.Text; }
set { label1.Text = value; }
}
}
在Form2中我正在改变帧速率。 在调试这个项目时,我发现FrameRate在Form2和Form1上都有变化,但是当我进一步运行时
label2.Text = Framerate
没有改变。我的问题是,为什么它不会马上改变,我该怎么办才能让它立即改变
编辑:
它似乎在显示Form2之前运行整个button1_click。
当我关闭Form2时,Label1.Text会被更改(因为获取/设置的东西),但对我的应用来说已经太迟了
编辑:
经过一些麻烦,我自己找到了答案,也许并不好,但为我的申请工作:public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Framerate = "Test1";
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this);
frm.Show();
}
private void test()
{
label2.Text = Framerate;
}
public string Framerate
{
get { return label1.Text; }
set
{
label1.Text = value;
test();
}
}
}
每个人都感谢你们帮助我。
答案 0 :(得分:1)
在label2.Refresh();
后尝试label2.Text = Framerate;
。
答案 1 :(得分:1)
您需要在Form2中包含对Form1.Label2的引用,或者让Form2引发Form1正在侦听以进行帧率更改的事件。
答案 2 :(得分:0)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Framerate = "Test1";
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this);
frm.Show();
}
private void test()
{
label2.Text = Framerate;
}
public string Framerate
{
get { return label1.Text; }
set
{
label1.Text = value;
test();
}
}
}