Это, кажется, на самом деле уникально ужасно в 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.
Я понятия не имею, почему не существует более элегантного решения, и приветствовал бы вклад любого, кто знает о лучшем подходе.