2

我想知道是否可以更改 inactiveForm的文本?那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 FormText吗?

4

3 回答 3

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");
    }
}
于 2013-08-18T22:54:19.340 回答
2

如果您想Text在调用之前更改MessageBox.Show(...),请正常进行。如果您想Text在调用后更改,MessageBox.Show(...)可以使用BeginInvoke显示如下消息框:

 BeginInvoke((Action)(() => { MessageBox.Show("OK"); }));     
 Text = "????";
于 2013-08-18T22:57:16.620 回答
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?";
    }

不幸的是,即使是最好的意图也无法阻止它变得重复和烦人。不要告诉用户他已经知道和期望什么。只告诉他有关的惊喜

于 2013-08-18T22:56:40.800 回答