2013-04-04 4 views
1

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

Когда я отключен, элемент управления не может выбрать текст, но я теряю цвета, потому что они становятся серыми (отключены). Как отключить выбор текста, не отключая элемент управления с большим текстовым полем?

FYI: Я использую богатое текстовое поле в качестве метки, потому что мне нужно изменить цвет переднего цвета на красный для одного слова в строке, которая должна отображаться пользователю. Я использовал статью this SO и следующий способ сделать это.

string word = "red"; 
int start = richTextBox1.Find(word); 
if (start >= 0) { 
    richTextBox1.Select(start, word.Length); 
    richTextBox1.SelectionColor = Color.Red; 
} 

EDIT: КСТАТИ Это C# Winform

+0

Какая разница, если текст можно выбрать? Они не могут редактировать его или удалять, поэтому возможных негативных побочных эффектов нет. –

+0

@CodyGray Вы правы. Но это внешний вид должен быть ярлыком. Вот почему я пытаюсь это сделать. – Irshad

+1

[проверьте это] (http://stackoverflow.com/questions/3805545/how-do-i-change-the-style-of-a-disabled-control) – Damith

ответ

1

Просто обработать выбор, и не восстановить его в "ничего":

// so you have colour (set via the Designer) 
richTextBox.Enabled = true; 

// so users cannot change the contents (set via the Designer) 
richTextBox.ReadOnly = true; 

// allow users to select the text, but override what they do, IF they select the text (set via the Designer) 
richTextBox.SelectionChanged += new System.EventHandler(this.richTextBox_SelectionChanged); 

// If the user selects text, then de-select it 
private void richTextBox_SelectionChanged(object sender, EventArgs e) 
{ 
    // Move the cursor to the end 
    if (this.richTextBox.SelectionStart != this.richTextBox.TextLength) 
    { 
     this.richTextBox.SelectionStart = this.richTextBox.TextLength; 
    } 
} 

Взято из: http://social.msdn.microsoft.com/Forums/en-US/winformsdesigner/thread/d1132ee5-acad-49f3-ae93-19d386fe2d12/

(К путь, немного of searching идет длинный путь.)

+0

Имеет ли это уродливое мерцание частичного выделения всякий раз, когда пользователь выбирает что-то? –

+0

@CodyGray Я еще не тестировал его, но я подозреваю, что так оно и есть. Но если OP хочет использовать элемент управления для чего-то, для которого он не предназначен, я полагаю, вам нужно принять поведение, отличное от совершенства. –

+0

@ JonathonReinhart Я назвал это. И я также использовал принятый ответ в статье MSDN. Но задний цвет остается таким же. Серый отключен. – Irshad