C# 如何提交 TextBox?

4
在一个表单中,我有一个文本框绑定了一个对象的成员属性“Title”。同时还有一个“保存”按钮来测试绑定。似乎在文本框失去焦点之前,底层对象属性不会得到更新。但是没有form.ActiveControl.Blur()可用。此外,这似乎不是一种可靠的方法。有更好的方法吗?谢谢。
编辑:抱歉没有表达清楚。我的问题在标题中:“如何提交TextBox”。我使用“commit”这个词是从DataGridView commit和BindingSource commit中来的。而且这是WinForms。(从未使用过WPF,所以我没有想到。对不起)。
我实际上的场景是我有一堆TextBox绑定到一个单一对象的属性。用户在所有TextBox中输入值,当用户点击保存(工具栏按钮)时,最后一个TextBox仍然处于焦点状态(或处于编辑模式),因此保存将无法捕获最后一个文本框中的值。我想找到正确的方法,在保存之前“提交”文本框的值。谢谢。

4
这是WinForms还是WPF? - R. Martinho Fernandes
“Blur”方法会做什么?不清楚你在问什么。总得有某个东西拥有焦点。你只是想知道如何将焦点从文本框更改到表单上的另一个控件吗? - Cody Gray
请详细说明,您在这里想要实现什么。 - Shekhar_Pro
我所询问的是标题中的内容:如何提交一个文本框(值)。请查看我编辑过的帖子。对于造成的困惑,我感到抱歉。 - Jake
2个回答

2
听起来与问题描述中的WPF有关。
您希望更改绑定,以便在属性值更改时更新,而不是在文本框失去焦点时更新(这是绑定到TextBox.Text时的默认行为)。您可以通过在绑定上设置UpdateSourceTrigger属性来实现此目的:
<TextBox Text="{Binding UpdateSourceTrigger=PropertyChanged}"/>

谢谢Bubblewrap。看起来它不管是WPF还是其他,架构都很相似。请查看我编辑过的帖子以获取详细信息。感谢您的帮助。 - Jake

2
由于问题已更新为WinForms,您需要以与WPF应用程序不同的方式处理事情。幸运的是,解决方案非常简单。
每当用户单击“保存”按钮(例如,在您的保存按钮的Click事件处理程序中),您需要调用BindingSource上的EndEdit方法。这将导致所有挂起的更改提交到底层数据源,正是您希望实现的目标。
此外,请参阅MSDN上有关相关文档的相关文档,了解更多详细信息。

4
谢谢你的提示,Cody。我正在使用BindingList而不是BindingSource(因为BindingSource属于Forms命名空间,我不想让逻辑层受到影响),在你的帮助下我找到了这个函数this.ActiveControl.DataBindings["Text"].WriteValue()。 - Jake
@Jake:说得有道理。我发完帖子后意识到我假设你正在使用BindingSource,但你的问题实际上并没有明确指出你是如何处理数据绑定的。我很高兴你能找到所需的解决方案。 - Cody Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接