1

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

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

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

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

我需要采取哪些步骤:

  • 在控件显示之前对其进行初始化
  • 获取正确的值(控件或 BindingSource)Validation()
4

2 回答 2

0

我通过以编程方式更改为 Tab2 然后切换回 Tab1 解决了这个问题

        foreach (TabPage tab in tabControl.TabPages)
        {
            tab.Visible = true;
        }
        tabControl.SelectedIndex = 0;
于 2009-04-27T02:39:18.237 回答
0

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

微软论坛上的一个问题进一步证实了我的经历:

这是 .NET 数据绑定的工作方式:在控件首次变为可见之前,绑定是无效的。...除了使控件暂时可见之外,没有其他解决方法。

于 2009-04-30T02:31:19.290 回答