我想知道是否可以更改非活动Form
的文字? Form
为Inactive
因为我显示了MessageBox
。
我试过这样的事情:
private void ChangeFormText()
{
Form1 f = new Form1();
f.Text = "This doesn't work...";
}
但这不起作用。我试过这个:
private void ChangeFormText()
{
this.Text = "This still doesn't work...";
}
这也不起作用。我也试过这个:
Form1 form = null;
public void ChangeFormText()
{
form.Text = "And this won't work!";
}
但这会引发错误。
这仍然不起作用:
this.Text = "NOTHING WORKS";
有没有办法更改Inactive
Form
的{{1}}?
答案 0 :(得分:3)
显示MessageBox
时,Form
中的任何代码都无法运行。并且您不能将代码放入MessageBox
(据我所知)。
但你可以做的是使用异步工作的BackgroundWorker。
这有效:
public partial class Form1 : Form
{
BackgroundWorker w = new BackgroundWorker();
public Form1()
{
InitializeComponent();
w.DoWork += new DoWorkEventHandler(w_DoWork);
}
void w_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(1000);
Invoke(new Action(doit));
}
void doit()
{
Text = "Changed";
}
private void button1_Click(object sender, EventArgs e)
{
w.RunWorkerAsync();
MessageBox.Show("Random Text");
}
}
答案 1 :(得分:2)
这是你无需照顾的事情。窗口的标题栏已经绘制出独特的颜色,任何Windows用户都熟悉它。但你可以,你有这样的事件:
private void Form1_Deactivate(object sender, EventArgs e) {
this.Text = "I miss you, come back soon";
}
private void Form1_Activated(object sender, EventArgs e) {
this.Text = "I'm back! What can I do to help you today?";
}
不幸的是,即使是最好的意图也不会阻止重复和烦人。不要告诉用户他已经知道和期望的内容。只告诉他有关惊喜的信息。
答案 2 :(得分:2)
如果您想在调用Text
之前更改MessageBox.Show(...)
,请执行此操作。如果您想在致电Text
后更改MessageBox.Show(...)
,可以使用BeginInvoke
来显示如下消息框:
BeginInvoke((Action)(() => { MessageBox.Show("OK"); }));
Text = "????";