控件应该被禁用和隐藏还是只是隐藏?

ste*_*ell 9 .net c# controls winforms

在.NET窗体上操作控件时,以下哪项是最佳实践?为什么?

//Hide control from user and stop control form being useable
oControl.Enabled = false;
oControl.Visible = false;
Run Code Online (Sandbox Code Playgroud)

要么

//Hide control from user and stop control form being useable
oControl.Visible = false;
Run Code Online (Sandbox Code Playgroud)

我一直在使用第一个案例并且在隐藏它时总是禁用控件,但我被告知这是错误的,我应该只是隐藏它.我似乎依稀记得在某个地方阅读如果你没有明确地让一个控件可以继续与用户交互.

任何启示都会被贬低.

Jus*_*tin 9

Enabled 是指用户是否可以与控件交互(即控件是否显示为灰色)

Visible 是指是否显示控件(通常如果这是假的,控件根本不会呈现,但显然不是所有时间 - 请参阅本文的评论).

如果未呈现控件,则启用的属性的值将不会产生任何影响.

  • 情况并非总是如此; 在ChrisF的回答下看到我对ToolStripMenuItem的评论. (4认同)

Fre*_*örk 9

Enabled = false隐藏控件时是否需要设置取决于所讨论的控件,以及它提供的交互类型.对于许多控件(例如a Button或a CheckBox),设置Visible = false足以防止用户和控件之间的任何交互.

但是一些控件(似乎特别是那些提供快捷键属性的控件)仍然会在不可见时提供用户交互.例如在ToolStripMenuItem(与"老" MenuItem)仍然有自己的Click事件调用时按下不管快捷键,Visibletruefalse.

在这些情况下,设置Enabled = false将阻止Click通过快捷键调用事件.从这个角度来看,我建议Enabled = false在WinForms应用程序中隐藏控件时进行设置.


Chr*_*isF 8

来自MSDN:

可见性不可见的元素不参与输入事件(或命令),不影响布局的测量或排列过程,不在标签序列中,也不会在命中测试中报告.

所以我认为你可以认为设置.Enabled = false是不必要的.

UPDATE

我已经检查了.Visibity MSDN上文档,但不幸的是它没有说明控件是否被禁用.

  • 请注意,您链接到的文档是指WPF,而不是WinForms.例如,具有指定快捷键的ToolStripMenuItem,Visible = False和Enabled = True将在按下快捷键时调用其Click事件,即使它是隐藏的. (9认同)

Zoo*_*oba 5

快速测试显示将Visible设置为false也会禁用该控件的加速键.

在Win32下(即,这不适用于Windows窗体),加速器在隐藏但未禁用控件时保持启用状态.我认为这是你想到的参考.