你能改变一个非活动表格的文字吗?

时间:2013-08-18 22:40:53

标签: c# .net winforms text

我想知道是否可以更改非活动Form的文字? FormInactive因为我显示了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}}?

3 个答案:

答案 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 = "????";