【问题标题】:Preventing a control changing its Text property while it is not enabled防止控件在未启用时更改其 Text 属性
【发布时间】:2012-01-30 08:19:09
【问题描述】:

我的应用程序中有一些DomainUpDown 控件。行为设置如下:

  • 正常:每个控件可以单独向上/向下(更改所选项目)
  • 特殊:如果选中了一个复选框,向上/向下第一个控件将导致其他控件也发生变化

现在在某些情况下,我希望通过设置 Disabled = true 来禁用某些控件。我做到了,但在这种情况下,更改第一个控件的选定项会导致其他禁用的控件也更改选定项。

有没有办法完全禁用控件,使其不接受 control.Text = "bla bla" 之类的东西?

P.S:我不需要隐藏控件!

【问题讨论】:

  • 在更新 TextBox 值的事件中,为什么不简单地检查 TextBox 上的 Enabled 属性并仅在设置为 true 时更改文本?
  • 我将其保留为最后的选择。由于控件的数量很多并且需要大量的编辑。我希望有一种方法可以完全禁用控件,我想知道为什么 Disabled 并没有真正禁用控件!
  • Disabled 只是阻止用户与控件交互或引发事件。 MSDN:使用 Enabled 属性,您可以在运行时启用或禁用控件。例如,您可以禁用不适用于应用程序当前状态的控件。您还可以禁用控件以限制其使用。例如,可以禁用按钮以防止用户单击它。如果控件被禁用,则无法选择。

标签: c# winforms controls


【解决方案1】:

一种方式:

您可以保存一个 Textbox.Text 值列表,该列表将保存您所有文本框的条目。

OnTextChanged:

  • 如果您的文本框启用 - 更新它的 text 属性并将其存储在列表中。

  • 如果您的文本框禁用 - 将其文本 property 设置为列表中的最后一个值。

您可以使用Dictionary 或任何包含KeyValuePair 对象的类似对象。

【讨论】:

    【解决方案2】:

    恐怕没有。至少不是没有额外的工作。

    【讨论】:

    • 那不是答案。我不会 -1 你,但你需要详细说明......“额外的工作”是什么?
    • @Shai 您可以派生自己的文本框(或您正在使用的组件)并在修改Text 时检查Disabled 属性,或者使用TextChanged 事件直接处理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2013-01-09
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多