我正在尝试将Textbox.Text
绑定到Form.Text
(设置表单的标题)。
绑定本身有效。但是,在移动整个表单之前,标题不会更新。
如何在不移动表单的情况下实现Form.Text
更新?当我在文本框中输入内容时,我希望Form.Text
直接更新。
编辑;我在一个由ToolStripTextbox触发的TextChanged事件中设置Form的标题:
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]
答案 0 :(得分:3)
经典问题,您不是更新现有表单的Text属性,而是更新不可见的新属性。更改文本后调用Show()方法。
您还可以尝试在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 :(得分:1)
如何使用TextBox的TextChanged事件,如下所示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.Text = this.textBox1.Text;
}
}
答案 2 :(得分:0)
我有同样的问题,几乎吓坏了我。最后我发现“this.text =”的表单标题更新请求被方法“WndProc(ref Message message)”阻止。在WndProc方法结束时,我添加了“base.WndProc(ref message)”,它也将所有消息传递给基类。之后,我可以通过“this.text =”成功更新我的表单标题。
因此,我建议您查找阻止表单标题更新的方法。
答案 3 :(得分:0)
所有传统项目均无效(无效和刷新);我也无法轻易确定消息可能被阻止的位置。然而,睡觉线程照顾了这一点。
fForm1->Text = Title;
Thread::Sleep(0); //Allow release for title to update