2013-11-07 1 views
1

мой код:как отключить ctrl + A и ctrl + c в richtextbox в wpf?

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if ((e.Key==Key.LeftCtrl && e.Key==Key.C) || (e.Key==Key.RightCtrl && e.Key==Key.C)) 
     { 
      MessageBox.Show("Copy not allowed !"); 
      e.Handled = true; 

     } 
    } 

или another way, я попытался это:

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if ((e.Key==Key.C) && (Keyboard.Modifiers==ModifierKeys.Control)) 
     { 
      MessageBox.Show("Copy not allowed !"); 
      e.Handled = true; 
     } 


    } 

Но они не работают!

Пожалуйста, не говорите мне, чтобы установить Focusable="False" или IsHitTestVisible="False"

потому что после этого, я не могу использовать полосы прокрутки!

Пожалуйста, помогите. спасибо.

ответ

2

Вы можете обрабатывать PreviewKeyDown событие ... ты чуть было не это, вы просто необходимо и (&) Keyboard.Modifiers, поскольку она может содержать больше, чем просто ModifierKeys.Control:

private void PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.C && (Keyboard.Modifiers & ModifierKeys.Control) == 
     ModifierKeys.Control) 
    { 
     MessageBox.Show("CTRL + C was pressed"); 
    } 
} 
+0

спасибо, он отлично работает :) +1 проголосуйте за вас. –

0

RichTextBox для ввод текста, хорошо, вы можете сделать это только для чтения, так почему вы хотите предотвратить копирование?

Попробуйте использовать изображения для предотвращения копирования или отключения фокусировки/выбора. Если пользователь выбирает текст, уничтожьте выделение.

0

Вам необходимо подписаться на PreviewKeyDown-Event и в Handler вы должны установить e.Handled = true, если была нажата комбинация клавиш.

2

Я предполагаю, что ваша проблема не в том, как отключить ctrl + A и ctrl + C, только потому, что вы не хотите, чтобы пользователь выполнял именно это, но чтобы пользователь не копировал содержимое текстового поля. Проблема в том, что Ctrl + A Ctrl + C - не единственный способ скопировать данные. Пользователь может выбрать текст и щелкнуть правой кнопкой мыши.

Так что вы должны сделать это, чтобы не отменить нажатие клавиши, а фактическую команду, которая запускается. (Вы можете прочитать о том, как команда работает в WPF.)

Чтобы сделать это, просто добавьте следующий метод к классу

private void CancelCopyCommand(object sender, DataObjectEventArgs e) 
{ 
    MessageBox.Show("Copy not allowed !"); 
    e.CancelCommand(); 
} 

И в конструкторе, зарегистрировать команду следующим образом: DataObject.AddCopyingHandler (richTextBox1, CancelCopyCommand);

+0

вы правы. вы отлично работаете! +1 проголосуйте за вас. –