ReadOnly和Enabled之间的主要区别是什么?

在Windows窗体控件中,有两个属性: ReadOnlyEnabled

这两个属性有什么区别? 我觉得他们的行为方式相同。

正如它在以下论坛post中所述:

在TextBox的上下文中,readonly允许用户将焦点设置为并选择和复制文本,但不能对其进行修改。 禁用的TextBox不允许任何交互。

当您拥有希望用户查看和复制但不能修改的数据时,请使用ReadOnly。 当您显示的数据不适用于对话框或窗口的当前状态时,请使用禁用的文本框。

摘自: MSDN论坛

ReadOnly我通常与TextBox或包含文本的其他控件相关联; 它决定用户是否可以修改控件显示的文本。 但是,用户仍然可以选择文本(例如,将其复制并粘贴到另一个程序中)。

Enabled基本上控制是否可以与控件进行任何用户交互。 例如,无法单击带有Enabled == falseButton ; 无法切换具有Enabled == falseCheckBox等。请注意,具有Enabled == falseTextBox也不能选择其文本(即用户交互)。

此外,使用Enabled == false控件不会引发与用户交互相关的事件,例如Click

Enabled指定是否允许用户交互。 如果禁用控件,则它不会生成任何UI事件。

ReadOnly确定用户是否可以编辑控件的内容。 例如,无法编辑ReadOnly TextBox,但您仍然可以单击它,选择其中包含的文本等。

某些控件(例如按钮)只能启用或禁用。 禁用的控件将提供一个可视指示,表明它无法立即与之交互(通常通过灰化/淡出)。 其他也可以是只读的,因为它们可以以某种方式进行交互但不进行编辑 。 例如,一个上下控件通常就是这样,这意味着您可以按下按钮来更改值,但不能通过正常键入来编辑它。 (也可能有控件,你永远不能与之交互但仍然有用的禁用;标签仍然可以显示灰色,作为指示GUI的整个区域现在不可用的一部分,这是一个更多令人愉悦的视觉效果,而不仅仅是改变互动的控制。)

实际上,被禁用意味着控件也是只读的。 我已经看过一些不真实的案例,而且对我来说,它总是比其他任何事情都更像是一个错误。 最好将状态视为表示三态值,其中一个状态不用于某些控件。

如果您使用带有滚动条的文本框作为示例,ReadOnly不允许用户编辑文本,但滚动条仍处于活动状态(考虑安装程序中的许可证框)。 Enabled = false将导致整个控件禁用,而不仅仅是文本编辑区域。

另外,我在这里读到,如果文本框标记为Enabled =“false”,则其值不会在回发中的Viewstate中保留。

不要忘记,视障人士的屏幕阅读器无法读取禁用文本框中的文本,因为它无法获得焦点。 对于ADA合规性,请使用ReadOnly