Перекрываем Undo/Redo в Windows.Forms
Недавно столкнулся с такой проблемой -- надо было перекрыть стандартный обработчик Undo/Redo в RichTextBox'е. Казалось бы, что тут сложного -- делаем компонент-наследник от искомого, перегружаем WndProc и при получении EM_UNDO мирно молчим, не показывая, что что-либо произошло =) Но, не тут-то было. Реализовав данный алгоритм я с удивлением обнаружил, что ничего не получилось... Тогда пришлось прихывать на помощь две абсолютно потрясающих утилиты: Hawkeye (о которой, кстати, узнал из блога Exception'a) и .Net Reflector (которым пользовался достаточно давно).
В итоге выяснилось, что при получении сообщения EM_UNDO, контрол получает в нагрузку еще цепочку из 5-ти сообщений, которые так же нельзя пропускать. В общем, получилась несколько ненормальная реализация перекрытия Undo/Redo:
В итоге выяснилось, что при получении сообщения EM_UNDO, контрол получает в нагрузку еще цепочку из 5-ти сообщений, которые так же нельзя пропускать. В общем, получилась несколько ненормальная реализация перекрытия Undo/Redo:
public partial class SyntaxHighLightArea : RichTextBox { private int UndoQueueCount = 0; [System.Security.Permissions.PermissionSet( System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] protected override void WndProc(ref Message msg) { if (msg.Msg == Convert.ToInt32(PAL.Native.Msg.EM_UNDO)) { UndoQueueCount = WinPAL.RedoBackCountMessages; return; } if (UndoQueueCount > 0) { if(UndoQueueCount == 1) { PAL.Native.SendMessage(Parent.Handle, PAL.Native.Msg.EM_UNDO, IntPtr.Zero, IntPtr.Zero); } UndoQueueCount--; return; } base.WndProc(ref msg); } private void SyntaxHighLightArea_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if ((Control.ModifierKeys == Keys.Control) && (e.KeyCode == Keys.Z)) { PAL.Native.SendMessage(this.Handle, PAL.Native.Msg.EM_UNDO, IntPtr.Zero, IntPtr.Zero); } } .......skip....... } |

2 комментария:
Очень полезно
Как говорилось на 2NT.ru Доброго всем времени суток. У меня такая ситуация. Встречаюсь с мужчиной 5 лет. Ему 40, мне 30. У него был брак, развелись по её инициативе в последствии 7 лет совместной жизни. Через 2 года мы начали встречаться. Он живёт с родителями, бываю у него дома. Хочу давно семью и детей. Он диалогы на эту тему пресекает, говорит, что не любит выяснять отношения. Уходила от него некоторое количество раз, потом не выдерживала и сама возвращалась. Сейчас решила уйти бесповоротно. Но ужасно тяжело, т.к. он мой первый мужчина и всё-таки 5 лет сообща. Подскажите, верное ли решение я приняла. Спасибо
Отправить комментарий