【问题标题】:C# How to commit a TextBox?C#如何提交一个文本框?
【发布时间】:2011-05-31 02:02:31
【问题描述】:

在一个表单中,我有一个 TextBox 在其成员属性“Title”上绑定一个对象。旁边还有一个“保存”按钮来测试绑定。

除非文本框失去焦点,否则基础对象属性似乎不会更新。但是没有 form.ActiveControl.Blur() 可供使用。此外,这看起来不像是一个健全的 hack。

无论如何要做得更好?谢谢。

编辑:抱歉不清楚。我的问题在标题中:“如何提交文本框”。我使用 DataGridView 提交和 BindingSource 提交中的“提交”一词。它在 WinForms 中。 (从未使用过 WPF,所以我没有想到。抱歉)。

我的实际情况是我有一堆 TextBox 绑定到单个对象的属性。用户在所有文本框中输入值,当用户单击保存(工具栏按钮)时,最后一个文本框仍处于焦点(或处于编辑模式),因此保存不会捕获最后一个文本框中的最后一个值。

我想在保存之前找到“提交”文本框值的正确方法。

谢谢。

【问题讨论】:

  • 这是 WinForms 还是 WPF?
  • Blur 方法会做什么?不清楚你在这里问什么。 某事总是必须有焦点。您是否只想知道如何将焦点从文本框更改为表单上的另一个控件?
  • 请详细说明,你真正想在这里完成什么
  • 我要问的是标题:如何提交文本框(值)。请看我编辑的帖子。很抱歉造成混乱。

标签: c# winforms binding textbox


【解决方案1】:

从问题描述中听起来像 WPF..

您希望更改绑定,使其在属性值更改时更新,而不是在文本框失去焦点时更新(这是绑定到 TextBox.Text 时的默认设置)。您可以通过在绑定上设置 UpdateSourceTrigger 属性来做到这一点:

<TextBox Text="{Binding UpdateSourceTrigger=PropertyChanged}"/>

【讨论】:

  • 谢谢泡泡纸。看起来它是否是 WPF 并不重要。架构类似。详情请参阅我编辑的帖子。为您提供帮助。
【解决方案2】:

由于问题已更新以表明这是 WinForms,因此您需要处理的事情与这是 WPF 应用程序有所不同。幸运的是,事实证明解决方案非常简单。

每当用户点击“保存”按钮时(例如,在您的保存按钮的Click 事件处理程序中),您需要在您的BindingSource 上调用EndEdit 方法 .这将导致所有挂起的更改都提交到底层数据源,这正是您希望完成的。

有关详细信息,另请参阅 MSDN 上的relevant documentation

【讨论】:

  • 感谢您的提示,科迪。我正在使用 BindlingList 而不是 BindingSource (因为 BindSource 属于 Forms 命名空间,我不想用它污染逻辑层)并且在您的帮助下,我设法找到了函数 this.ActiveControl.DataBindings["Text"] .WriteValue();
  • @Jake:这是有道理的。在我发布之后,我意识到我在假设您使用的是BindingSource。您的问题实际上并未指定您如何处理数据绑定。很高兴您能够找到所需的解决方案。
猜你喜欢
  • 2015-11-18
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多