1

我正在尝试将 a 绑定Textbox.TextForm.Text(设置表单的标题)。绑定本身有效。但是,在我移动整个表单之前,标题不会更新。

如何Form.Text在不移动表单的情况下实现更新?我想Form.Text在文本框中输入内容时直接更新。

编辑; 我在由 ToolStripTextbox 触发的 TextChanged 事件中设置了表单的标题:

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]
4

4 回答 4

3

经典问题,您不是在更新现有表单的 Text 属性,而是更新一个不可见的新属性。更改文本后调用 Show() 方法。

来源

您还可以尝试在 TextChanged 事件中使表单无效,以便强制重新绘制。

编辑 1:这个StackOverflow 问题可能会为您提供答案,因为您是 MDI 应用程序

编辑 2:可能是此操作不是线程安全的,因此 UI 线程被阻塞。因此,您需要调用另一个函数以使其更新。不久前,我在 StatusBar Labels 上遇到了类似的问题。如果您不知道如何使用委托,这里是一些示例代码:

public delegate void updateFormTextD(string text);

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

private void updateFormText(string text)
{
     Invoke(new updateFormTextD(formText), text);
}
于 2009-11-18T15:02:42.110 回答
1

使用TextBox的TextChanged事件怎么样,像这样:

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

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        this.Text = this.textBox1.Text;
    }
}
于 2009-11-18T14:58:59.497 回答
0

我遇到了同样的问题,几乎吓坏了我。最终我发现“this.text =”的表单标题更新请求被“WndProc(ref Message message)”方法阻止。在 WndProc 方法的末尾,我添加了“base.WndProc(ref message)”,它也将所有消息传递给基。之后,我可以通过“this.text =”成功更新我的表单标题。

因此,我建议您寻找一种阻止表单标题更新的方法。

于 2010-04-13T19:51:52.990 回答
0

传统项目都不起作用(无效和刷新);我也无法轻松确定消息可能被阻止的位置。然而,休眠线程处理了这一点。

fForm1->Text = Title;

Thread::Sleep(0); //Allow release for title to update
于 2011-02-13T06:55:06.020 回答