Лучший способ для отображения текста только для чтения в C # - PullRequest
6 голосов
/ 12 февраля 2010

Отображение текста в текстовом поле со свойством Enabled, установленным в значение false или равным true только для чтения, создает черный на сером тексте, который совсем не очень удобен для чтения.

Какой самый простой способ красиво отображать текст только для чтения в Windows Forms?

Ответы [ 3 ]

7 голосов
/ 12 февраля 2010

Не можете ли вы переопределить свойства ForeColor и BackColor, когда они заблокированы?

В противном случае создайте свой собственный класс текстового поля, который прослушивает событие KeyUp и перехватывает нажатие клавиши, если для свойства ReadOnly (или Locked) установлено значение true (предотвращение его добавления в текст.) Затем можно использовать любые стили тебе нравится.

0 голосов
/ 12 февраля 2010

Это, кажется, на самом деле уникально ужасно в Windows, в зависимости от степени, к которой вы хотите перейти (например, хотите ли вы, чтобы текст выбирался или нет, если вы хотите иметь возможность форматировать текст).

Я обнаружил это некоторое время назад, но мне повезло обнаружить, что ужас был достаточно хорошо задокументирован в различных блогах. Кажется, вы можете использовать RichTextBox, но создайте обработчики событий, чтобы предотвратить изменение содержимого конечными пользователями.

например. RichTextBox называется «myRichTextBox», тогда вы бы хотели добавить следующее в Designer.cs для формы:

this.myRichTextBox.SelectionChanged += new System.EventHandler(this.MyRichTextBox_Deselect);
this.myRichTextBox.DoubleClick += new System.EventHandler(this.MyRichTextBox_Deselect);
this.myRichTextBox.GotFocus += new System.EventHandler(this.MyRichTextBox_Deselect);
this.myRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.MyRichTextBox_LinkClicked);

И тогда вы захотите создать в своей форме такие методы:

public void MyRichTextBox_Deselect(object sender, EventArgs e)
{
    // When user tries to select text in the rich text box, 
    // set selection to nothing and set focus somewhere else.
    RichTextBox richTextBox = sender as RichTextBox;
    richTextBox.SelectionLength = 0;
    richTextBox.SelectionStart = richTextBox.Text.Length;
    // In this case I use an instance of separator bar on the form to switch focus to.
    // You could equally set focus to some other element, but take care not to
    // impede accessibility or visibly highlight something like a label inadvertently.
    // It seems like there should be a way to drop focus, perhaps to the Window, but
    // haven't found a better approach. Feedback very welcome.
    mySeperatorBar.Focus();
}

public void MyRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e)
{
    System.Diagnostics.Process.Start(e.LinkText);
}

Очевидно, что вы можете не заботиться об обработчике LinkClickedEventHandler (), но я уверен, что хочу, чтобы эта функциональность была довольно распространенной, учитывая, что элемент управления RichTextBox имеет возможность автоматически идентифицировать и раскрашивать URL.

Я понятия не имею, почему не существует более элегантного решения, и приветствовал бы вклад любого, кто знает о лучшем подходе.

0 голосов
/ 12 февраля 2010

Мммм ... Использовать ярлык? Почему вы хотите использовать текстовое поле и сделать его доступным для редактирования, когда это не так? Вы хотите, чтобы пользователи запутались? Нарушайте привычные идиомы стиля пользовательского интерфейса на свой страх и риск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...