2013-08-18 30 views
2

我想知道是否可以更改不活动的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"; 

有什么办法来改变InactiveFormText

+0

'this.Text'就可以了(假设'this'是正确的形式)。使用调试器来确定它何时运行。特别是'MessageBox.Show()'是一个阻塞调用。 – SLaks

+0

this.Text不工作! – Dozer789

+0

当您调用MsgBox时,表单是否处于活动状态?你能否给我们提供更多的代码,以便我们看到你想要实现的目标? –

回答

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"); 
    } 
} 
+0

谢谢TON!这非常帮助我! – Dozer789

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

如果您想在致电MessageBox.Show(...)之前更改Text,只需正常操作。如果你想打电话MessageBox.Show(...)后改变Text可以使用BeginInvoke显示消息框是这样的:

BeginInvoke((Action)(() => { MessageBox.Show("OK"); }));  
Text = "????"; 
相关问题