Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文本框数据绑定到Form.Text(标题)_C#_Winforms_Data Binding_Textbox_Title - Fatal编程技术网

C# 将文本框数据绑定到Form.Text(标题)

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

我正在尝试将Textbox.Text绑定到表单。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]

使用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属性时,我从未发现任何重绘问题。你能和我们分享一些代码片段吗?这会导致与我的问题中描述的相同的行为。因此,当我移动/调整表单大小时,文本会被更新。我不知道该告诉你什么,我用这些代码创建了一个简单的应用程序,我没有遇到任何问题。这似乎是一个例子:嘿,它在我的机器上工作。对不起,我不能再帮你了……这导致了与我的问题中描述的相同的行为。因此,当我移动/调整表单大小时,文本会被更新。我不知道该告诉你什么,我用这些代码创建了一个简单的应用程序,我没有遇到任何问题。这似乎是一个例子:嘿,它在我的机器上工作。对不起,我不能再帮你了。。。