簡體   English   中英

RichTextBox相當於TextBox.AcceptsReturn

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM