2015-06-17 2 views
1

У меня есть только текстовое поле только для чтения и редактируемое текстовое поле. Текст из прочитанного только из редактируемого. Одновременно их нельзя рассматривать. Когда пользователь нажимает клавишу, он скрывает только чтение, а затем выбирает эту позицию в редактируемой.C# RichTextBox ReadOnly Событие

Я хотел бы, чтобы ввести ключ, который был вдавлен в редактируемом без игры ошибка «динь»

Я думаю, что переопределение только для чтения функции ошибок было бы идеально, но я не конечно, что это.

private void EditCode(object sender, KeyPressEventArgs e) 
    { 
     int cursor = txtReadOnly.SelectionStart; 
     tabText.SelectedIndex = 0; 
     ToggleView(new object(), new EventArgs()); 
     txtEdit.SelectionStart = cursor; 
     txtEdit.Text.Insert(cursor, e.KeyChar.ToString()); 
    } 

Ответ:

private void EditCode(object sender, KeyPressEventArgs e) 
    { 
     e.Handled = true; 
     int cursor = txtCleanCode.SelectionStart; 
     tabText.SelectedIndex = 0; 
     ToggleView(new object(), new EventArgs()); 

     txtCode.Text = txtCode.Text.Insert(cursor, e.KeyChar.ToString()); 

     txtCode.SelectionStart = cursor + 1; 
    } 

Я должен сделать это проверить, если это не-контроль голец, но это еще одна сделка. Всем спасибо!

+0

_Когда пользователь нажимает клавишу, он скрывает только чтение, а затем выбирает эту позицию в editable_ Now. Какую позицию это будет? Один пользователь нашел с помощью мыши и клавиш курсора? Как вы переключаетесь обратно в rtf из окна редактирования? – TaW

+0

tabTxt.SelectedIndex = 0; ToggleView (новый объект(), новый EventArgs()); Переключает текст boxese. Это элемент управления вкладкой, который пользователь может щелкнуть. – GaidenFocus

+0

Хорошо, я заработал. Проблема заключалась в строке txtEdit. – GaidenFocus

ответ

1

Одна идея состоит в том, чтобы богатые текстовое поле для редактирования, но перечеркнул все ключи:

private void richtextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    // Stop the character from being entered into the control 
    e.Handled = true; 
    // add any other code here 
} 
+0

Ницца. Это избавило от раздражающего «бинга», когда ключ был нажат в поле ReadOnly. Не вводит текст в другой блок все еще, но не biggie. Благодаря! – GaidenFocus

1

Вот один из способов: Проверьте <Enter>, так что пользователь может по-прежнему использовать навигационные клавиши:

private void txtReadOnly_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     e.Handled = true; // no ding for normal keys in the read-only! 
     txtEdit.SelectionStart = txtReadOnly.SelectionStart; 
     txtEdit.SelectionLength = txtReadOnly.SelectionLength; 
    } 
} 

Не нужно возиться с курсором. Убедитесь в том, чтобы:

txtEdit.HideSelection = false; 

и, возможно, также

txtReadOnly.HideSelection = false; 

Очевидно, чтобы держать две синхронизированные:

private void txtEdit_TextChanged(object sender, EventArgs e) 
{ 
    txtReadOnly.Text = txtEdit.Text; 
} 

Вы должны о решить на какой-то мере для г пользователю вернуться от редактирования до просмотра. Escape должен быть зарезервирован для прерывания редактирования! Может быть, Control-Enter?

+0

Только что заметил, что у вас тоже был e.Handled. Это приблизило меня, но не до финиша. Благодаря! – GaidenFocus

+0

Синсинг был настолько прост, что я думал, что у вас это работает. Понимали ли вы различные вопросы, которые я задал, -? – TaW