2013-08-18 66 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 = "????"; 
相關問題