簡體   English   中英

將文本框數據綁定到Form.Text(標題)

[英]Databinding Textbox to Form.Text (title)

我正在嘗試將Textbox.Text綁定到Form.Text (它設置表單的標題)。 綁定本身有效。 但是,在移動整個表單之前,標題不會更新。

如何在不移動表單的情況下實現更新Form.Text 當我在文本框中輸入內容時,我希望直接更新Form.Text

編輯; 我在TextChanged事件中設置了Form的標題,該事件由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:我看到我忘了提一些東西。 不知道它是否添加了任何內容,但我的應用程序是MDI應用程序。 標題的一部分改變是:

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

經典問題,您不是更新現有表單的Text屬性,而是更新不可見的新屬性。 更改文本后調用Show()方法。

資源

您還可以嘗試在TextChanged事件中使表單無效,以便強制重新繪制。

編輯1:由於您是MDI應用程序,因此StackOverflow問題可能為您提供答案

編輯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);
}

如何使用TextBox的TextChanged事件,如下所示:

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

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

我有同樣的問題幾乎嚇壞了我。 最后我發現“this.text =”的表單標題更新請求被方法“WndProc(ref Message message)”阻止。 在WndProc方法結束時,我添加了“base.WndProc(ref message)”,它也將所有消息傳遞給基類。 之后,我可以通過“this.text =”成功更新我的表單標題。

因此,我建議您查找阻止表單標題更新的方法。

傳統項目均無效(無效和刷新); 我也無法輕易確定消息可能被阻止的位置。 然而,睡覺線程照顧到了這一點。

fForm1->Text = Title;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM