【问题标题】:How can I force VB.net, that a ENTER creates a new line, rather than close the Dialog Box?如何强制 VB.net,即 ENTER 创建一个新行,而不是关闭对话框?
【发布时间】:2009-05-24 21:03:26
【问题描述】:

我用 RichTextBox 构建了一个对话框,我想 有以下行为:

我在 RichTextBox 中获得了焦点(光标)。 当按下 ENTER 键时,富编辑中应该有一个新行 创建的控件。 ENTER 不应该关闭对话框 [就像现在这样 :-( ].

有什么想法吗?

【问题讨论】:

  • 感谢您提出这个问题。我也有同样的问题。

标签: vb.net user-interface


【解决方案1】:

如果表单的AcceptButton 属性被分配,引用表单上的一个按钮,这将拦截回车键按下。确保表单没有分配任何 AcceptButton,并且文本框应该接收到 Enter 按键并按预期运行。

更新:如果您想拥有 AcceptButton 的行为并让 RichTextBox 在获得焦点时接收回车键按下,您可以通过两种不同的方式实现此目的。一种是设置表单的KeyPreview属性为true,在表单的KeyPress事件处理函数中加入如下代码:

private void Form_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Enter && this.ActiveControl != theRichTextBox)
    {
        this.DialogResult = DialogResult.OK;
    }
}

另一种方法是分配 AcceptButton 属性,指出一个按钮(该按钮又将其 DialogResult 属性设置为 OK)。然后,您可以为 RichTextBox 控件的 Enter 和 Leave 事件添加事件处理程序,这将暂时取消分配表单的 AcceptButton 属性:

private void RichTextBox_Enter(object sender, EventArgs e)
{
    this.AcceptButton = null;
}

private void RichTextBox_Leave(object sender, EventArgs e)
{
    this.AcceptButton = btnAccept;
}

【讨论】:

  • @TopBanana:我刚试过;确实如此,无论是常规文本框还是 RichTextBox 控件(均使用 MultiLine = true)。
  • @Frederik 你是绝对正确的。也尝试 AcceptsReturn=true。抱歉,我手头没有 IDE。
  • @TopBanana:AcceptsReturn=true 与 AcceptButton 配合得很好。不幸的是,RichTextBox 上似乎不可用(它有 AcceptsTab,但没有 AcceptsReturn)...
【解决方案2】:

你的意思是 RichTextBox 对吧?您需要将 AcceptsReturn 属性设置为 true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    相关资源
    最近更新 更多