繁体   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