为什么在c#中启用多行功能的文本框控件上禁用了CTRL+A快捷键?
本文关键字:控件 快捷键 CTRL+A 文本 启用 功能 为什么 | 更新日期: 2023-09-27 18:11:00
MSDN关于TextBox的ShortcutsEnabled属性的文档说明:
当Multiline属性值为true时,TextBox控件不支持CTRL+A快捷键。
…但是为什么呢?Kaitlyn在下面提到,TextBox
和RichTextBox
都来自同一个基类TextBoxBase
,但是RichTextBox
控件本身支持快捷方式。
手动添加它是很容易的,有很多问题回答如何做到这一点,但我不明白为什么他们会在这种特定的情况下禁用这个功能。
技术原因是什么?
引用别人的话:
可能是因为TextBox包装了本机Windows EDIT控件,它只支持快捷方式的一个子集。
引自fracimazric Hamidi在https://stackoverflow.com/a/5893879/3472690
经过一些研究后,fracry提到的原生Windows编辑控件似乎是这个,在MSDN中,关于编辑控件。
正如Alan Macdonald在对上面链接的同一个答案的评论中所说的那样……
编辑:多行文本框的可怕特性
发现另一个可能的原因。引用自SuperUser的DMA57361,
作为快捷键,Ctrl+ a = Select All是Windows没有实现的。
它只在那些自己实现了这个快捷方式的程序中起作用,而不是在整个系统中普遍起作用。
SuperUser的KCotreau对DMA57361的回答的附加评论也与xpda所说的关于兼容性(从引号中删除的名称):
在XP或Server 2003中没有实现,但在Windows 7和Server 2008(可能还有Vista)中实现了,至少在运行框中实现了。所以你的系统在技术上没有问题……它只是缺少一个功能。
关于MSDN本身的更多信息,这与上面的其他引用相对应…"关于编辑控件";文章说:
富编辑控件支持许多在系统编辑控件中不可用的特性。有关更多信息,请参见富编辑控件。
此外,编辑控件也有限制,正如本文所引用的,也来自MSDN(但开发者网络部分而不是Windows开发中心,我不确定这有什么区别…)
编辑控件设计用于输入、显示和编辑少量文本。它们并不打算成为大规模文本编辑器的基础。
它也,正如xpda所说,似乎已经很好地打算这样做,或者他们只是不想麻烦地修复它,正如对Visual Studio反馈部分中关于多行文本框不支持选择全部快捷方式的问题的回复所引用的那样:
我们已经评估了你们报告的问题,在产品生命周期的这一点上,它不符合要解决的标准。此评估是仔细完成的,并考虑了许多方面,包括修复的成本、更改的含义以及报告的问题实例的数量。
最后,为了进一步解释为什么这是由设计…为什么会是"兼容性"……在某个CodeGuru论坛上,Shuja Ali说:
它从来没有在VB 6.0和。net 1.1中工作过
进一步"支持"引用自Shuja Ali, TextBoxBase。ShortcutEnabled属性是。net Framework 2.0的新特性,而Ctrl+A快捷键在那个阶段已经不起作用了,正如hemantpurkar对那篇文章的评论所证明的那样。
因此,把以上所有的研究浓缩成一句话…
无法使用快捷键"Ctrl+ a";从。net框架的第一个版本开始就存在了,在这个版本中,快捷方式得到了适当的支持(2.0),而微软从那时起就懒得修复它,因此它被称为"由设计"。然后像这样留下"兼容性"
官方的答案是"这是故意的"。可能很久以前这样做是为了保持兼容性。您可以使用RichTextBox来获取默认情况下的所有快捷键,包括Ctrl-A。