如何在未显示的选项卡上访问绑定控件的值以进行验证?

时间:2009-04-24 03:49:49

标签: winforms validation data-binding tabcontrol

我创建了一个包含3个标签的对话框。选项卡1和&amp ;; 2使用Validating()事件进行验证。用户将主要处理Tabs 1& 3,除非必要,否则不要显示标签2。标签1和标签1上的所有控件2绑定到BindingSource对象。

根据我的观察,在显示选项卡之前,似乎未在选项卡2上初始化绑定控件。因此,验证整个表单失败,因为这些控件没有任何价值。第一次调用""时TextBox.Text值为Validating(),查看选项卡后somevalue为<{1}}。

我尝试从Load事件(例如TextBox.Value = 'test';'预先初始化选项卡2上的控件,但发现在调用Validating()之前该值已被清除。

我想过检查BindingSource.Current中的值,但是这个特殊的解决方案有多个陷阱,特别是包含未经验证的值的BindingSource。

我需要采取哪些步骤:

  • 在显示控件之前初始化
  • 获取Validation()
  • 的正确值(control或BindingSource)

2 个答案:

答案 0 :(得分:0)

我通过以编程方式更改为Tab2,然后切换回Tab1

来解决此问题
        foreach (TabPage tab in tabControl.TabPages)
        {
            tab.Visible = true;
        }
        tabControl.SelectedIndex = 0;

答案 1 :(得分:0)

虽然我找不到任何权威来源进行确认,但看起来绑定控件在它们可见之前不会被初始化。通过隐藏文本框,我能够在默认显示的选项卡上确认类似的行为。控件的.Text值为"",直到控件可见,此时值已填充了我的预期值。

Microsoft论坛上的question进一步证实了我的体验:

  

这是.NET数据绑定的工作方式:绑定无效,直到控件首次可见。   ...   除了暂时使控件可见之外没有任何解决方法。