Отключить изменение размера шрифта для RichTextBox - PullRequest
1 голос
/ 29 мая 2011

В моем приложении я использую RichTextBox es со свойством readonly, установленным в True.
Но размер шрифта все еще можно изменить с помощью колесика мыши и сочетания клавиш по умолчанию в Windows для изменения размера шрифта ( Ctrl + shift + > / <</kbd>).

Как отключить RichTextBox изменение размера шрифта?

Ответы [ 2 ]

3 голосов
/ 29 мая 2011

Чтобы отключить комбинации клавиш Control+Shift+< или Control+Shift+>, необходимо реализовать следующий обработчик событий KeyDown для элемента управления RichTextBox :

 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 .См. Код ниже для реализации UserControl, полученного из RichTextBox:

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
0 голосов
/ 04 августа 2017

Вот класс, который предлагает отключить масштабирование как по колесу прокрутки, так и по сочетанию клавиш в качестве реальных параметров свойств, которые вы получаете при редактировании компонентов в представлении конструктора:

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);
    }
}
...