2009-11-18 43 views
1

我試圖將Textbox.Text綁定到Form.Text(它設置表單的標題)。 綁定本身的作品。但是,標題不會更新,直到我移動整個表單。將文本框數據綁定到Form.Text(標題)

如何在不移動窗體的情況下更新Form.Text?當我在文本框中輸入內容時,我想直接更新Form.Text

編輯;我設置在TextChanged事件的形式由ToolStripTextbox解僱的標題:

public partial class ProjectForm : Form 
{ 
    public ProjectForm() 
    { 
     // my code contains all sorts of code here, 
     // but nothing that has something to do with the text. 
    } 
} 

private void projectName_TextChanged_1(object sender, EventArgs e) 
{ 
    this.Text = projectName.TextBox.Text; 
} 

而且數據綁定版本:

public partial class ProjectForm : Form 
{ 
    public ProjectForm() 
    { 
     this.projectName.TextBox.DataBindings.Add("Text", this, "Text", true, DataSourceUpdateMode.OnValidation); 
    } 
} 

編輯2:我看到我忘了提東西。不知道它是否增加了一些東西,但我的apllication是一個MDI應用程序。改變標題的部分是:

ApplicationName [THIS CHANGES, BUT ONLY AFTER MOVING/RESIZING] 
+1

真的很奇怪。直接設置Form.Text屬性時,我從來沒有觀察到任何重繪問題。你能和我們分享一些代碼片段嗎? – 2009-11-18 15:00:29

回答

3

經典的問題,你不更新現有形式的文本財產,但一個新的不可見。更改文本後調用Show()方法。

Source

您也可以嘗試在TextChanged事件無效表單所以它會強制重新油漆。

編輯1:,因爲你是一個MDI應用此StackOverflow question可以提供給你一個答案

編輯2:這可能是因爲這個操作不是線程安全的,因此在UI線程被阻塞。因此,您需要調用另一個函數以使其更新。我有一個與StatusBar標籤類似的問題。以下是一些示例代碼,如果您不知道如何使用代表:

public delegate void updateFormTextD(string text); 

private void formText(string text) 
{ 
    this.Text = text; 
} 

private void updateFormText(string text) 
{ 
    Invoke(new updateFormTextD(formText), text); 
} 
1

怎麼樣使用TextBox的TextChanged事件,像這樣:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     this.Text = this.textBox1.Text; 
    } 
} 
+0

這導致與我的問題中所述的行爲相同。所以當我移動/調整窗體大小時,文本會被更新。 – MysticEarth 2009-11-18 15:02:37

+0

然後不知道該告訴你什麼,我用這個代碼創建了一個簡單的應用程序,我沒有任何問題。這似乎是一個例子:「嘿,它在我的機器上運行。」對不起,我無法再幫你了... – 2009-11-18 15:20:05

0

我有同樣的問題,幾乎讓我感到困惑。最終我發現「this.text =」的表單標題更新請求被方法「WndProc(ref message message)」阻止了。在WndProc方法的末尾,我添加了「base.WndProc(ref message)」,它將所有消息傳遞給基礎。之後,我可以通過「this.text =」更新我的表單標題。

因此,我建議你尋找一種方法來阻止你的表單標題被更新。

0

沒有傳統項目的工作(無效&刷新);我也無法確定郵件可能被阻止的位置。但是,睡眠線程照顧了這一點。

fForm1->Text = Title; 

Thread::Sleep(0); //Allow release for title to update