[英]RichTextBox equivalent of TextBox.AcceptsReturn
我正在为RichTextBoxes切换几个TextBox,以获得一些很酷的功能。
我将TextBox配置为AcceptReturn,以便输入键将创建一个新行,而不是保留控件。 RichTextBox似乎没有此功能。
有一种简单的方法可以做到这一点,还是我必须捕获所有按键并单独处理它们?
注意:仅当您设置窗体的“AcceptButton”属性时,才会出现此问题。
将RichTextBox.AcceptsTab设置为true。 由于某种原因,这适用于选项卡和回车键。 如果您只想输入密钥,则必须编写自定义代码。
解决方案是覆盖IsInputKey
:
protected override bool IsInputKey(Keys keyData)
{
if (
(keyData & ~Keys.Modifiers) == Keys.Tab &&
(keyData & (Keys.Control | Keys.Alt)) == 0
)
return false;
return base.IsInputKey(keyData);
}
将AcceptsTab
设置为true后,确保RichTextBox
处理tab和return键。 使用上面的IsInputKey
实现,我们确保Tab和Shift + Tab键永远不会到达RichTextBox
因此它们用于导航。
上述覆盖必须粘贴在从RichTextBox
派生的类中。
由于Carter指出这只适用于设置了AcceptButton,而另一个解决方案建议派生RichTextBox类,我找到了另一个简单的解决方案。 只是在/ RichTextBox具有焦点的时候取消设置AcceptButton。 这是一个示例代码:
private void RichText_Enter(object sender, EventArgs e)
{
AcceptButton = null;
}
private void RichText_Leave(object sender, EventArgs e)
{
AcceptButton = OKActionButton;
}
这假设您只有一个AcceptButton并且不太可能改变。 否则,您必须在此处复制一些AcceptButton查找逻辑,或者在将其设置为null之前备份先前的AcceptButton值。
此解决方案还具有从实际接受按钮中删除默认边框的副作用,向用户指示现在按下Enter键将不会激活该按钮。
只需将Richtextbox Property中的Accept选项更改为“true”,它就会像魔术一样工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.