为什么在 C# 中启用多行的 TextBox 控件上禁用 CTRL+A 快捷方式?
Why is the CTRL+A shortcut disabled on Multiline-enabled TextBox controls in C#?
MSDN 的 documentation 对于 TextBox 的 ShortcutsEnabled 属性 指出:
The TextBox control does not support the CTRL+A shortcut key when the Multiline property value is true.
...但是为什么呢? Kaitlyn 在下面提到 TextBox
和 RichTextBox
都来自相同的基础 class TextBoxBase
,但 RichTextBox
控件本身支持快捷方式。
手动重新添加它很容易,有很多问题可以回答 如何 执行此操作,但我想不出 为什么 在这种特定情况下,他们会竭尽全力禁用此功能。
技术原因是什么?
引用别人的话,是:
probably because TextBox wraps the native Windows EDIT control, which only supports a subset of the shortcuts.
引自 Frédéric Hamidi 在
经过一些研究,Frédéric 提到的原生 Windows 编辑控件似乎是 this one, at MSDN, regarding Edit Controls。
正如 Alan Macdonald 在对上面链接的相同答案的评论中所说...
Terrible feature of multiline text boxes
编辑:
找到另一个潜在的原因。引自DMA57361 of SuperUser,
As a shortcut, Ctrl+A = Select All is not something implemented by Windows.
It will only work in those programs that implement this shortcut themselves, not universally across the system.
SuperUser 的 KCotreau 对 DMA57361 的回答的附加评论也符合 xpda 所说的兼容性(名称从引用中删除):
it is not implemented in XP or Server 2003, but it is implemented in Windows 7 and Server 2008 (and probably Vista), at least for the Run box. So your system does not technically have a problem...it just lacks a feature.
至于来自 MSDN 本身的更多信息,并且与上面的其他引用相对应......“About Edit Controls”文章说:
Rich edit controls support many features not available in system edit controls. For more information, see Rich Edit Controls.
此外,正如 this article, also from MSDN 引用的那样,编辑控件存在限制(但开发者网络部分而不是 Windows 开发中心,我不确定是什么不同之处在于...)
Edit controls were designed to enter, display, and edit small amounts of text. They were not meant to be the basis for large-scale text editors.
它也像xpda所说的那样,似乎已经很好地打算这样做了,or they simply didn't want to bother fixing it, as quoted by a reply to an issue regarding multiline textboxes not supporting the Select-All shortcut on the Visual Studio feedback section:
We have evaluated the issue that you have reported and at this point in the product's lifecycle, it does not meet the criteria to be addressed. This evaluation is carefully done and considers many aspects including the cost of the fix, implications of the change, and the number of reported instances of the issue.
最后,为了进一步解释为什么这是设计使然...以及为什么它会是为了“兼容性”...引用 Shuja Ali on a certain CodeGuru forum, saying:
It never used to work in VB 6.0 and .NET 1.1
为了进一步“支持”Shuja Ali 的话,TextBoxBase.ShortcutEnabled Property is new for .NET Framework 2.0, and the Ctrl+A shortcut already doesn't work at that stage, as evident by the comment by a hemantpurkar to that article。
因此,要将上述所有研究浓缩成一句话...
The inability to use the shortcut "Ctrl+A" has existed since the very first version of the .NET Framework where shortcuts are supported properly (2.0), and Microsoft has been too lazy to fix it ever since, thus it is claimed to be "by design" and left like that for "compatibility".
官方的回答是 "by design." 大概是很久以前为了保持兼容性做过一次吧。默认情况下,您可以使用 RichTextBox 获取所有快捷键,包括 Ctrl-A。
MSDN 的 documentation 对于 TextBox 的 ShortcutsEnabled 属性 指出:
The TextBox control does not support the CTRL+A shortcut key when the Multiline property value is true.
...但是为什么呢? Kaitlyn 在下面提到 TextBox
和 RichTextBox
都来自相同的基础 class TextBoxBase
,但 RichTextBox
控件本身支持快捷方式。
手动重新添加它很容易,有很多问题可以回答 如何 执行此操作,但我想不出 为什么 在这种特定情况下,他们会竭尽全力禁用此功能。
技术原因是什么?
引用别人的话,是:
probably because TextBox wraps the native Windows EDIT control, which only supports a subset of the shortcuts.
引自 Frédéric Hamidi 在
经过一些研究,Frédéric 提到的原生 Windows 编辑控件似乎是 this one, at MSDN, regarding Edit Controls。
正如 Alan Macdonald 在对上面链接的相同答案的评论中所说...
Terrible feature of multiline text boxes
编辑:
找到另一个潜在的原因。引自DMA57361 of SuperUser,
As a shortcut, Ctrl+A = Select All is not something implemented by Windows.
It will only work in those programs that implement this shortcut themselves, not universally across the system.
SuperUser 的 KCotreau 对 DMA57361 的回答的附加评论也符合 xpda 所说的兼容性(名称从引用中删除):
it is not implemented in XP or Server 2003, but it is implemented in Windows 7 and Server 2008 (and probably Vista), at least for the Run box. So your system does not technically have a problem...it just lacks a feature.
至于来自 MSDN 本身的更多信息,并且与上面的其他引用相对应......“About Edit Controls”文章说:
Rich edit controls support many features not available in system edit controls. For more information, see Rich Edit Controls.
此外,正如 this article, also from MSDN 引用的那样,编辑控件存在限制(但开发者网络部分而不是 Windows 开发中心,我不确定是什么不同之处在于...)
Edit controls were designed to enter, display, and edit small amounts of text. They were not meant to be the basis for large-scale text editors.
它也像xpda所说的那样,似乎已经很好地打算这样做了,or they simply didn't want to bother fixing it, as quoted by a reply to an issue regarding multiline textboxes not supporting the Select-All shortcut on the Visual Studio feedback section:
We have evaluated the issue that you have reported and at this point in the product's lifecycle, it does not meet the criteria to be addressed. This evaluation is carefully done and considers many aspects including the cost of the fix, implications of the change, and the number of reported instances of the issue.
最后,为了进一步解释为什么这是设计使然...以及为什么它会是为了“兼容性”...引用 Shuja Ali on a certain CodeGuru forum, saying:
It never used to work in VB 6.0 and .NET 1.1
为了进一步“支持”Shuja Ali 的话,TextBoxBase.ShortcutEnabled Property is new for .NET Framework 2.0, and the Ctrl+A shortcut already doesn't work at that stage, as evident by the comment by a hemantpurkar to that article。
因此,要将上述所有研究浓缩成一句话...
The inability to use the shortcut "Ctrl+A" has existed since the very first version of the .NET Framework where shortcuts are supported properly (2.0), and Microsoft has been too lazy to fix it ever since, thus it is claimed to be "by design" and left like that for "compatibility".
官方的回答是 "by design." 大概是很久以前为了保持兼容性做过一次吧。默认情况下,您可以使用 RichTextBox 获取所有快捷键,包括 Ctrl-A。