我在
Databound Windows Forms control does not recognize change until losing focus看到答案.
但这并不能完全回答我的问题.我有同样的情况.在ToolStrip_click上,我看过我的所有控件,并强制执行“WriteValue()”,但是在保存之前仍会恢复到之前的值.任何人都可以建议我如何解决这个问题?我是否执行不正确?
private void menuStrip1_ItemClicked(object sender,ToolStripItemClickedEventArgs e) { // Make sure that all items have updated databindings. foreach (Control C in this.Controls) { foreach (Binding b in C.DataBindings) { // Help: this doesn't seem to be working. b.WriteValue(); } } }
该代码现在要简单得多,但这是一个相当的黑客.我会很高兴知道是否有更“正确”的解决方案.
private void menuStrip1_ItemClicked(object sender,ToolStripItemClickedEventArgs e) { // Make sure that all text fields have updated by forcing everything // to lose focus except this lonely little label. label44.Focus(); }
解决方法
问题可能是您的数据绑定控件设置为更新验证.
您需要将每个数据绑定控件的DataSourceUpdateMode设置为DataSourceUpdateMode.OnPropertyChanged.例如,数据绑定文本框:
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text",this.someBindingSource,"SomeProperty",true,System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
您还可以通过以下方式在设计器中设置数据源更新模式:
选择控件并转到属性窗口 – > (DataBindings) – > (高级)
– >将下拉列表中的[数据源更新模式]设置为OnPropertyChanged.
干杯