C# 将文本框数据绑定到Form.Text(标题)
我正在尝试将Textbox.Text绑定到表单。Text用于设置表单标题。 绑定本身可以工作。但是,在我移动整个表单之前,标题不会更新 如何在不移动表单的情况下实现表单文本的更新?我希望在文本框中键入内容时,Form.Text会直接更新 编辑;我在ToolStripTextbox触发的TextChanged事件中设置表单标题:C# 将文本框数据绑定到Form.Text(标题),c#,winforms,data-binding,textbox,title,C#,Winforms,Data Binding,Textbox,Title,我正在尝试将Textbox.Text绑定到表单。Text用于设置表单标题。 绑定本身可以工作。但是,在我移动整个表单之前,标题不会更新 如何在不移动表单的情况下实现表单文本的更新?我希望在文本框中键入内容时,Form.Text会直接更新 编辑;我在ToolStripTextbox触发的TextChanged事件中设置表单标题: public partial class ProjectForm : Form { public ProjectForm() { // my c
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]
使用TextBox的TextChanged事件怎么样,如下所示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.Text = this.textBox1.Text;
}
}
使用TextBox的TextChanged事件怎么样,如下所示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.Text = this.textBox1.Text;
}
}
经典问题是,您并没有更新现有表单的文本属性,而是更新了一个不可见的新属性。更改文本后调用Show方法
您还可以尝试在TextChanged事件中使表单无效,以便强制重新绘制
编辑1:这可能会为您提供答案,因为您是一个MDI应用程序
编辑2:可能是此操作不是线程安全的,因此UI线程被阻塞。因此,您需要调用另一个函数以使其更新。不久前,我在状态栏标签上遇到了类似的问题。如果您不知道如何使用委托,下面是一些示例代码:
public delegate void updateFormTextD(string text);
private void formText(string text)
{
this.Text = text;
}
private void updateFormText(string text)
{
Invoke(new updateFormTextD(formText), text);
}
经典问题是,您并没有更新现有表单的文本属性,而是更新了一个不可见的新属性。更改文本后调用Show方法
您还可以尝试在TextChanged事件中使表单无效,以便强制重新绘制
编辑1:这可能会为您提供答案,因为您是一个MDI应用程序
编辑2:可能是此操作不是线程安全的,因此UI线程被阻塞。因此,您需要调用另一个函数以使其更新。不久前,我在状态栏标签上遇到了类似的问题。如果您不知道如何使用委托,下面是一些示例代码:
public delegate void updateFormTextD(string text);
private void formText(string text)
{
this.Text = text;
}
private void updateFormText(string text)
{
Invoke(new updateFormTextD(formText), text);
}
我也有同样的问题,几乎把我吓坏了。最终,我发现this.text=发出的表单标题更新请求被WndProcref Message方法阻止。在WndProc方法的末尾,我添加了base.WndProcref消息,它也将所有消息传递给base。之后,我可以通过this.text=成功更新我的表单标题
因此,我建议您寻找一种阻止表单标题更新的方法。我也遇到了同样的问题,几乎让我抓狂。最终,我发现this.text=发出的表单标题更新请求被WndProcref Message方法阻止。在WndProc方法的末尾,我添加了base.WndProcref消息,它也将所有消息传递给base。之后,我可以通过this.text=成功更新我的表单标题
因此,我建议您寻找一种方法,阻止表单标题被更新。没有一个传统的项目无效&刷新;我也无法轻易确定消息可能被阻止的位置。然而,睡线解决了这个问题
fForm1->Text = Title;
Thread::Sleep(0); //Allow release for title to update
没有一个传统的项目无效并刷新;我也无法轻易确定消息可能被阻止的位置。然而,睡线解决了这个问题
fForm1->Text = Title;
Thread::Sleep(0); //Allow release for title to update
真奇怪。在直接设置Form.Text属性时,我从未发现任何重绘问题。你能和我们分享一些代码片段吗?真奇怪。在直接设置Form.Text属性时,我从未发现任何重绘问题。你能和我们分享一些代码片段吗?这会导致与我的问题中描述的相同的行为。因此,当我移动/调整表单大小时,文本会被更新。我不知道该告诉你什么,我用这些代码创建了一个简单的应用程序,我没有遇到任何问题。这似乎是一个例子:嘿,它在我的机器上工作。对不起,我不能再帮你了……这导致了与我的问题中描述的相同的行为。因此,当我移动/调整表单大小时,文本会被更新。我不知道该告诉你什么,我用这些代码创建了一个简单的应用程序,我没有遇到任何问题。这似乎是一个例子:嘿,它在我的机器上工作。对不起,我不能再帮你了。。。