Имею простое приложение c# Windows form. Далее есть единственная форма с контролом richtextbox, который закреплен на всей форме(по размеру). В боксе есть три строки. При запуске приложения выделяю весь текст мышью, и провожу курсором над текстом. Появляются лаги непонятного происхождения (и курсор вечно обновляется). Код выложу по надобности, ибо его там нет, как такового. Это нормально? И как исправить лаги? Форма имеет задний буфер. Код:
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.richTextBox1.Text = "testtesttesttesttesttesttesttesttesttesttesttesttesttesttest\n" +
"testtesttesttesttesttesttesttesttesttesttesttesttesttesttest\n" +
"testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttest";
}
}
}
И это всё. Вот видео, там видно, как моргает курсор: https://youtu.be/AUeUUw8Pt2M Повторюсь, видно плохо, но видно. Я не знаю, как ещё показать. P.S.: кода просто больше нет. Это всё.
Итак, код, который поможет исправить эту проблему:
private bool isRichTextBox;
public Form1()
{
InitializeComponent();
this.richTextBox1.Text = "testtesttesttesttesttesttesttesttesttesttesttesttesttesttest\n";
isRichTextBox = false;
}
[DllImport("user32.dll")]
public static extern int SetCursor(IntPtr cursor);
private int WM_SETCURSOR = 0x0020;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SETCURSOR && this.isRichTextBox)
{
SetCursor(Cursors.IBeam.Handle);
m.Result = new IntPtr(1); // возврат истины
return;
}
base.WndProc(ref m);
}
private void richTextBox1_MouseLeave(object sender, EventArgs e)
{
SetCursor(Cursors.Arrow.Handle);
this.isRichTextBox = false;
}
private void richTextBox1_MouseMove(object sender, MouseEventArgs e)
{
this.isRichTextBox = true;
}
Мы отлавливаем событие изменения курсора в оконной процедуре и "не даём" менять курсор(вызываем WinAPI функцию для смены курсора на IBeam), а также возвращаем истину. Также, я добавил событие при выходе курсора за границы контрола(чтобы курсор менялся на Arrow). Также, член isRichTextBox следит за тем, чтобы курсор не обновлялся за границами контрола. Теперь всё работает. P.S.: но самое интересное, почему это вообще происходит - мною не было найдено. На 5 ПК, что я тестировал, но одном всплыла эта проблема. И не ясно почему. Поэтому, если кто-то знает - дополните ответ, буду только рад.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть сайт на WordPress и тема AppointmentДля того чтобы вставить свои иконки вместо Font-Awesome использовал следующий код в таблице стилей, но изменить...
Доброго времени сутокПытаюсь перенести сайт с конструктора на хостин, все вроде скопировал, немного видоизменил но возникла проблема, с боковым...