Winforms рисует линии над текстовым полемC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Winforms рисует линии над текстовым полем

Сообщение Гость »


У меня есть дисплей, который настраивает текст, и по мере того, как пользователь настраивает его, я хочу, чтобы текст отображался. Одна из доступных настроек — это «x-out», при которой на всех 5 символах текста должен отображаться большой «X». Поэтому, когда флажок «X-Out» установлен, текст должен обновиться следующим образом:


Изображение


На это:


Изображение


Само поле представляет собой RichTextBox, содержащийся в Panel. Я пробовал использовать событие Paint на панели, но оно рисует его под RichTextBox (это маленькие красные линии по углам). Я также пробовал использовать собственный элемент управления RichTextBox, как на этом веб-сайте. Этот код работает, но только если я не устанавливаю текст и цвет в RichTextBox. Если я устанавливаю текст и цвет, а затем устанавливаю флажок, метод WndProc не вызывается. Как запустить метод WndProc с помощью Message.msg 15? Вот код:

Форма

публичный частичный класс ButtonDataForm: Форма { Кнопка CustomRichTextBox1; общедоступная форма ButtonDataForm() { ИнициализироватьКомпонент() } void OnFormLoad (отправитель объекта, EventArgs e) { cstmRichTextBox = новый CustomRichTextBox(richTextBox1); } недействительный OnXOutChecked() { cstmRichTextBox.IsChecked = xoutCheckbox.Checked; cstmRichTextBox.ParentTex.Refresh(); // Это не вызывает сообщение WndProc в cstmRichTextBox } } CustomRichTextBox

публичный класс CustomRichTextBox: NativeWindow { общественный RichTextBox ParentTextBox {получить; частный набор; } Графика textBoxGraphics; общественный bool IsChecked {получить; набор; } общедоступный CustomRichTextBox (RichTextBox tb) { РодительскийTextBox = ТБ; textBoxGraphics = Graphics.FromHwnd(tb.Handle); AssignHandle(ParentTextBox.Handle); } защищенное переопределение void WndProc(ref Message m} { переключатель(м.Сообщение) { случай 15: родительскийТекстБокс.Инвалидате(); base.WndProc(ref m); DrawXOut(); перерыв; по умолчанию: base.WndProc(ref m); перерыв; } } недействительный DrawXOut() { если (проверено) { Pen xpen = новое перо(ParentTextBox.ForeColor, 3); Точка topLeft = ParentTextBox.Location; int x1 = topLeft.X + ParentTextBox.Width; int y1 = topLeft.Y + ParentTextBox.Height; Точка topRight = новая точка(x1, topLeft.Y); Точка BottomLeft = новая точка(topLeft.X, y1); Точка нижняя правая = новая точка(x1, y1); textBoxGraphics.DrawLine(xpen, topLeft, BottomRight); textBoxGraphics.DrawLine(xpen, BottomLeft, TopRight); } } } РЕДАКТИРОВАТЬ:

Я попробовал разместить прозрачную панель на нижней панели и рисовать внутри нее, когда сработало событие Paint. Событие срабатывает, но на панели ничего не отображается. Я неправильно рассчитал местоположение?

void OnXOutChecked() { панель1.Обновить(); } void OnPanel1Paint (отправитель объекта, PaintEventArgs e) { Pen xpen = новое перо(Цвет.Красный, 3); Точка topLeft = Panel1.Location; int x1 = topLeft.X + Panel1.Width; int y1 = topLeft.Y + Panel1.Height; Точка topRight = новая точка(x1, topLeft.Y); Точка BottomLeft = новая точка(topLeft.X, y1); Точка нижняя правая = новая точка(x1, y1); e.Graphics.DrawLine(xpen, topLeft, BottomRight); e.Graphics.DrawLine(xpen, BottomLeft, TopRight); }
Изображение

Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Winforms рисует линии над текстовым полем
    Гость » » в форуме C#
    0 Ответы
    68 Просмотры
    Последнее сообщение Гость
  • Winforms рисует линии над текстовым полем
    Гость » » в форуме C#
    0 Ответы
    74 Просмотры
    Последнее сообщение Гость
  • WinForms: существует ли концепция связи метки с текстовым полем?
    Anonymous » » в форуме C#
    0 Ответы
    68 Просмотры
    Последнее сообщение Anonymous
  • WinForms: существует ли концепция связи метки с текстовым полем?
    Anonymous » » в форуме C#
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Форматирование предложения с текстовым полем в одну строку
    Anonymous » » в форуме CSS
    0 Ответы
    72 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»