2013-08-18 4 views
2

Мне интересно, можно ли изменить неактивный текст 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"; 

Есть ли способ изменить «ы TextInactiveForm?

+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

Если вы хотите изменить Text перед тем, как позвонить MessageBox.Show(...), просто сделайте это нормально. Если вы хотите изменить Text после вызова MessageBox.Show(...) вы можете использовать BeginInvoke, чтобы показать окно сообщения, как это:

BeginInvoke((Action)(() => { MessageBox.Show("OK"); }));  
Text = "????"; 
Смежные вопросы