简体   繁体   English

禁用 RichTextBox 的字体大小更改

[英]Disable fontsize change for RichTextBox

In my application I am using RichTextBox es with readonly property set to True.在我的应用程序中,我使用的是RichTextBox es,其 readonly 属性设置为 True。
But the font size can still be changed using the mouse wheel and default windows keyboard shortcut for fontsize change ( Ctrl + shift + > / < ).但是字体大小仍然可以使用鼠标滚轮和默认的 windows 键盘快捷键更改字体大小( Ctrl + shift + > / < )。

How do I disable RichTextBox font size change?如何禁用RichTextBox字体大小更改?

To disable the key combinations of Control+Shift+< or Control+Shift+> , you need to implement the following KeyDown event handler for your RichTextBox control:要禁用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

This code prevents the user from resizing the font in the given RichTextBox with keyboard commands.此代码可防止用户使用键盘命令调整给定RichTextBox中的字体大小。

To disable changing the font size by using Ctrl plus the mousewheel, the only way I know how to do this is to make a user control that inherits from RichTextBox .要禁用使用Ctrl加鼠标滚轮更改字体大小,我知道如何做到这一点的唯一方法是创建一个继承自RichTextBox的用户control

Once you have done that the only thing you need to do is override the WndProc procedure so that it effectively disables any messages when the scrollwheel is moving and the Ctrl button is pressed.完成此操作后,您唯一需要做的就是覆盖WndProc过程,以便在滚轮移动并按下Ctrl按钮时有效地禁用任何消息。 See the code below for implementing a UserControl derived from the RichTextBox :请参阅下面的代码以实现从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

Here's a class that offers disabling both scrollwheel and shortcuts zoom as actual options in the properties you get when editing the components in the designer view:这是一个 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);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM