【问题标题】:Dirty Form with TabControl带有 TabControl 的脏表单
【发布时间】:2012-11-02 16:44:04
【问题描述】:

您好,我有一个带有 TabControl 的表单,每个 tabPage 中有 3 个标签页和控件(文本框和组合框)。
我有一个事件用于 tabPages (controlValueChanged) 中控件的所有更改,还有一个事件用于 tabControl.SelectedIndexChanged。
所以如果表单是脏的,我想启用我的按钮(btnOK)。

Private Sub controlValueChanged(sender As System.Object, e As System.EventArgs)
     If bLoading=False 'bLoading is a boolean that is true after I create and populate the controls
        Dirty = True 'Dirty is a boolean property
     End If
End Sub

因此,当我在其中一个控件中更改某些内容时,会触发事件并启用 btnOK。
问题是我第一次更改(访问)到 tabPage 控件是 TabPage 触发 controlValueChanged 事件,导致我的按钮启用,即使我没有更改控件中的任何内容。
如果我第二次访问 TabPage,则不会触发该事件。
我知道这是正常的,但我如何才能克服这个问题并让我的 Dirty =true 只有当控件因为某些东西发生变化而不是当 tabPage 发生变化时才被触发?

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    创建一个新的布尔变量怎么样 - DoNotMakeDirty,比如说,那么你可以在TabControl1_SelectedIndexChanged 子中设置DoNotMakeDirty = True,然后在你的controlValueChanged 子中放置一个 if 语句。

    【讨论】:

    • 问题是当我更改 TabPage 时,首先是触发该 TabPage 中控件的 controlValueChanged 事件,然后是 TabControl1_SelectedIndexChanged。
    • ... 对不起,我错过了您的评论,但我尝试重新创建您的问题,它对我来说效果很好 - 我制作了一个带有 2 个选项卡和 2 个选项卡控件的表单组合框和事件只有在我更改组合框的索引后才会触发,正如预期的那样......
    • 也许问题是我动态地创建了所有东西。我正在使用在 controlValueChanged 之前触发的事件 TabPage_Enter。
    • 所以,要理解,每次输入选项卡时,您都在重新创建/重新填充控件......是的,这会触发控件的事件......它也应该放慢速度你的表单执行很多......如果是这种情况(我会考虑可能会改变一点),那么只需在创建控件之前设置 bLoading = False......不是吗?
    • 没有。抱歉,如果我没有正确解释 myslef。我正在动态创建控件。控件的定义(数量、类型、属性)来自 xml。所以一切都是动态创建的。对于文本框、组合框等控件,我添加了事件 controlValueChanged。所以我不在设计模式下构建控件,而是在运行时。因此,我不会重新创建任何东西。我创建了每个控件一次,但是当我第一次访问 tabPage 时第一次触发事件 COntrolValueChanged
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多