C # Event-Handling - PullRequest
       1

C # Event-Handling

2 голосов
/ 30 декабря 2011

Я работаю на пианино C #. Я уже построил музыкальную клавиатуру и персонал. Каждый раз, когда пользователь нажимает клавишу, она отображается на аппарате в соответствующей позиции.

Музыкальная нота, отображаемая на аппарате, сохраняется в массиве ящиков с картинками, как показано ниже.

public void addPictureBox(int x, int y, Image image)
{
    picBox[cnt] = new PictureBox();

    picBox[cnt].Image = image;
    picBox[cnt].Location = new Point(x, y);
    picBox[cnt].BackColor = Color.Transparent;

    panel3.Controls.Add(picBox[cnt]);
    picBox[cnt].BringToFront();
    picBox[cnt].MouseDown += new MouseEventHandler(Pic_MouseDown);
    picBox[cnt].MouseUp += new MouseEventHandler(Pic_MouseUp);

    cnt++;
}

События Pic_MouseDown и Pic_MouseUp позволяют пользователю воспроизводить заметку, щелкая по ней сотрудниками.

Что я хочу сделать сейчас, это создать событие на picBox [cnt] для перетаскивания. Однако picBox [cnt] .MouseDown и picBox [cnt] .MouseUp уже зарегистрированы в обработчиках событий Pic_MouseDown и Pic_MouseUp.

Как я могу сделать событие для обработки перетаскивания, так как MouseDown и MouseUp уже зарегистрированы в других обработчиках событий?

Спасибо:)

Ответы [ 4 ]

3 голосов
/ 30 декабря 2011

Самое замечательное в обработчиках событий заключается в том, что вы можете иметь столько подключенных обработчиков, сколько захотите.+= ( перегрузка оператора ) означает, что вы присоединяете новый обработчик событий к существующим обработчикам.Вы можете добавить столько обработчиков событий, сколько пожелаете.

Обзор обработчика событий

2 голосов
/ 30 декабря 2011

Если вы создаете логическое поле экземпляра isDragging, для которого вы устанавливаете значение true для мыши вниз и false для мыши вверх, то вы можете использовать событие перемещения мыши, чтобы определить, должен ли объект быть перемещен или нет.

1 голос
/ 30 декабря 2011

Вам нужно будет использовать комбинацию событий MouseDown, MouseMove и MouseUp. В MouseDown вы просто устанавливаете флаг, указывающий, что мышь была нажата, и записываете , где было нажато. В MouseMove вы проверяете, нажата ли кнопка вниз, и переместился ли курсор дальше, чем SystemInformation.DragSize, что указывает на то, что пользователь перетаскивает, а не щелкает, и запускаете операцию перетаскивания, если это необходимо. В MouseUp вы либо завершаете перетаскивание, либо выполняете действие щелчка.

0 голосов
/ 30 декабря 2011

Я считаю, что общепринятым для Drag-n-drop является

  • Вызов DoDragDrop в обработчике (управления источником) MouseDown
  • set AllowDrop = true вAllowDrop свойство элемента управления таргетинга
  • Существует целая серия событий перетаскивания для точной настройки поведения
  • Кажется, что не нужно беспокоиться о каких-либо скрытых MouseUp или MouseClick событиях.Я предполагаю, что это потому, что физические действия нажатия и отпускания кнопок выполняются над различными элементами управления и / или мышь физически перемещается "достаточно далеко".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...