Member 12277263 Ответов: 2

Как удалить событие ввода мыши


Всем привет,

Есть ли способ упростить этот код? вместо того чтобы включать и отключать pictureboxs
имя picturebox1.События мыши: mouseenter += form_MouseClick;
имя picturebox1.События мыши: mouseenter += form_MouseClick;

Пожалуйста, посмотрите код.

Что я уже пробовал:

private void form_MouseClick(object sender, EventArgs e)
       {
           PictureBox picturebox = sender as PictureBox;
           SaveFileDialog savefile = new SaveFileDialog();
           savefile.Filter = @"Images|*.png";
           if (savefile.ShowDialog() == DialogResult.OK)
           {
               string filepath = Path.GetExtension(savefile.FileName);
               if (picturebox != null && filepath != null)
               {
                   Image image = picturebox.Image;
                   SaveImage(image, savefile.FileName);
               }
           }
           disable_clickevent();
       }
       private static void SaveImage(Image image, string destPath)
       {
           image.Save(destPath, System.Drawing.Imaging.ImageFormat.Png);
       }
       private void savaImageToolStripMenuItem_Click(object sender, EventArgs e)
       {
           pictureBox1.MouseEnter += form_MouseClick;
           pictureBox2.MouseEnter += form_MouseClick;
       }
       private void disable_clickevent()
       {
           pictureBox1.MouseEnter -= form_MouseClick;
           pictureBox2.MouseEnter -= form_MouseClick;
       }

gggustafson

Предложение: у вас есть два отдельных события - это означает, что у вас есть два отдельных обработчика событий, один для MouseClick и один для MouseEnter. Помните "разделяй и властвуй"? Если обработка будет одинаковой, то вызовите общий метод из обоих обработчиков.

Member 12277263

Спасибо,
но есть ли способ использовать ContextMenuStrip?SourceControl, чтобы получить PictureBox без добавления / удаления этих событий.

Ralf Meier

Я не понимаю, чего вы добиваетесь - извините.
Возможно, вы дадите лучшее объяснение ...
На мой взгляд, вам не нужно удалять MouseEnter.События или назначить его обработчик форме ...

2 Ответов

Рейтинг:
1

CodeMine

Нажмите на это - я думаю, что это поможет лучше

Контроль.Событие MouseEnter (System.Окна.Формы)[^]


Рейтинг:
0

Rob Philpott

Ну что ж. Одна из проблем, с которой вы сталкиваетесь, заключается в том, что метод подписки может вызываться повторно, а это означает, что обработчик событий может быть вызван более одного раза, что довольно мрачно.

Кроме того, это, кажется, идет вразрез с тем, как обычно все происходит, вы не нажимаете на пункт меню, чтобы войти в режим, который затем настраивает события для чего-то.

Событие существует для того, чтобы сообщить вам, что элемент был нажат, а не для вызова более сложного действия. Не могли бы вы вместо этого использовать контекстное меню правой кнопки мыши на графических полях?