簡體   English   中英

C#事件處理

[英]C# Event-Handling

我正在研究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已經被注冊到其他事件處理程序中,我該如何處理該事件呢?

謝謝 :)

關於事件處理程序的偉大之處在於,您可以根據需要擁有任意數量的附加處理程序。 +=運算符重載 )意味着您要將新的事件處理程序附加到現有的處理程序上。 您可以根據需要添加任意數量的事件處理程序。

事件處理程序概述

如果創建一個isDragging布爾實例字段,並在鼠標按下時將其設置為true,在鼠標按下時將其設置為false,則可以使用鼠標移動事件來檢測是否應移動對象。

您需要結合使用MouseDown,MouseMove和MouseUp事件。 在的MouseDown,你做的比設置一個標志,表明該鼠標被按下,並記錄被壓制而已。 在MouseMove中,檢查按鈕是否仍處於按下狀態,並且光標已移至SystemInformation.DragSize ,這表示用戶正在拖動而不是單擊,並在需要時開始拖動操作。 在MouseUp中,您可以完成拖動或執行單擊動作。

我相信拖放的傳統智慧是

  • 在源控件的MouseDown處理程序中調用DoDragDrop
  • 在目標控件的AllowDrop屬性中設置AllowDrop = true
  • 有一系列拖動事件可以微調行為
  • 似乎不必擔心任何潛在的MouseUpMouseClick事件。 我假設這是因為按下和釋放按鈕的物理動作是在不同的控件上完成的,和/或鼠標物理移動了“足夠遠”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM