Один ScrollBar для двух RichTextBox

241
05 июня 2017, 21:10

Можно ли сделать один ScrollBar, который будет прокручивать два RichTextBox? RichTextBox1 - это сам текст, а RichTextBox2 пометки/комментарии к выбранной строке в RichTextBox1.

Answer 1

Создайте класс SynchronizedScrollRichTextBox, который наследуется от RichTextBox и переопределите метод WndProc:

public class SynchronizedScrollRichTextBox : System.Windows.Forms.RichTextBox
{
    public event vScrollEventHandler vScroll;
    public delegate void vScrollEventHandler(System.Windows.Forms.Message message);
    public const int WM_VSCROLL = 0x115;
    protected override void WndProc(ref System.Windows.Forms.Message msg)
    {
        if (msg.Msg == WM_VSCROLL)
        {
            if (vScroll != null)
            {
                vScroll(msg);
            }
        }
        base.WndProc(ref msg);
    }
    public void PubWndProc(ref System.Windows.Forms.Message msg)
    {
        base.WndProc(ref msg);
    }
}

Дальше измените в дизайнере формы тип своих richTextBox на SynchronizedScrollRichTextBox. В объявлении:

private SynchronizedScrollRichTextBox richTextBox1;
private SynchronizedScrollRichTextBox richTextBox2;

В инициализации:

private void InitializeComponent()
{
   ...
   this.richTextBox1 = new SynchronizedScrollRichTextBox();
   this.richTextBox2 = new SynchronizedScrollRichTextBox();
   ...
}

и в созданном событии vScroll добавьте:

private void richTextBox1_vScroll(Message message)
{
    message.HWnd = richTextBox2.Handle;
    richTextBox2.PubWndProc(ref message);
}

Оригинал: https://www.codeproject.com/tips/199253/WebControls/

READ ALSO
Метод расширения (ошибка)

Метод расширения (ошибка)

Подскажите, что я делаю не так? (посмотрите изображения ниже)

297
JS+CryptoAPI: как выбрать криптопровайдера?

JS+CryptoAPI: как выбрать криптопровайдера?

Стоит задача: определить из браузера, установлен ли у пользователя криптопровайдеры КриптоПРО CSP или VipNet CSP

297
Не получается вызвать событие при клике на canvas, Pixi.js

Не получается вызвать событие при клике на canvas, Pixi.js

Изучаю pixijs, не могу понять, почему это не работает

399
Как в js обрезать 5 символов?

Как в js обрезать 5 символов?

Переменная из php передает "8187 \r\n"Как в js обрезать - пробел\r\n, чтобы было "8187"; ?

410