禁用RichTextBox的字体大小更改

本文关键字:字体 RichTextBox 禁用 | 更新日期: 2023-09-27 17:58:07

在我的应用程序中,我使用的是只读属性设置为True的RichTextBox es
但是,字体大小仍然可以使用鼠标滚轮和默认的窗口键盘快捷键进行更改(Ctrl+shift+>><)。

如何禁用RichTextBox字体大小更改?

禁用RichTextBox的字体大小更改

要禁用Control+Shift+<Control+Shift+>的组合键,您需要为RichTextBox控件实现以下KeyDown事件处理程序:

 Private Sub RichTextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyDown
    ' disable the key combination of 
    '     "control + shift + <" 
    '     or
    '     "control + shift + >"
    e.SuppressKeyPress = e.Control AndAlso e.Shift And (e.KeyValue = Keys.Oemcomma OrElse e.KeyValue = Keys.OemPeriod)
End Sub

此代码防止用户使用键盘命令调整给定RichTextBox中的字体大小。

要禁用通过使用Ctrl和鼠标滚轮更改字体大小,我知道如何做到这一点的唯一方法是使用户control继承自RichTextBox

完成后,您唯一需要做的就是覆盖WndProc过程,以便在滚动轮移动且按下Ctrl按钮时有效禁用任何消息。请参阅下面的代码,以实现从RichTextBox:派生的UserControl

Public Class DerivedRichTextBox
    Inherits RichTextBox
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        ' windows message constant for scrollwheel moving
        Const WM_SCROLLWHEEL As Integer = &H20A
        Dim scrollingAndPressingControl As Boolean = m.Msg = WM_SCROLLWHEEL AndAlso Control.ModifierKeys = Keys.Control
        'if scolling and pressing control then do nothing (don't let the base class know), 
        'otherwise send the info down to the base class as normal
        If (Not scrollingAndPressingControl) Then
            MyBase.WndProc(m)
        End If

    End Sub
End Class

在设计器视图中编辑组件时,有一个类在属性中提供禁用滚动轮和快捷方式缩放的实际选项:

public class RichTextBoxZoomControl : RichTextBox
{
    private Boolean m_AllowScrollWheelZoom = true;
    private Boolean m_AllowKeyZoom = true;
    [Description("Allow adjusting zoom with [Ctrl]+[Scrollwheel]"), Category("Behavior")]
    [DefaultValue(true)]
    public Boolean AllowScrollWheelZoom
    {
        get { return m_AllowScrollWheelZoom; }
        set { m_AllowScrollWheelZoom = value; }
    }
    [Description("Allow adjusting zoom with [Ctrl]+[Shift]+[,] and [Ctrl]+[Shift]+[.]"), Category("Behavior")]
    [DefaultValue(true)]
    public Boolean AllowKeyZoom
    {
        get { return m_AllowKeyZoom; }
        set { m_AllowKeyZoom = value; }
    }
    protected override void WndProc(ref Message m)
    {
        if (!m_AllowScrollWheelZoom && (m.Msg == 0x115 || m.Msg == 0x20a) && (Control.ModifierKeys & Keys.Control) != 0)
            return;
        base.WndProc(ref m);
    }
    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (!this.m_AllowKeyZoom && e.Control && e.Shift && (e.KeyValue == (Int32)Keys.Oemcomma || e.KeyValue == (Int32)Keys.OemPeriod))
            return;
        base.OnKeyDown(e);
    }
}