2009-11-18 58 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