none
程式寫法 RRS feed

  • 問題

  • 各位大大您们好,我想請問一下程式的寫法,我的目的是要每個控制項可以自由移動,可是我要各別利用控制項的mousemove,mouseup,mousedown才能達到我的方法,我將我的寫法貼起來,如下,但如果我有很多個控制項我就要寫很多遍,請問各位大大,我將他們寫成副程式,可是我要如何呼叫它們呢,因為我可以將函式改成panel1_MouseDown(Control ctl, MouseEventArgs e),但我該如何使用MouseEventArgs e,請各位大大指教,謝謝

            private void panel1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    IsMouseDown = true;
                    OldX_panel = e.X;
                    OldY_panel = e.Y;
                }
            }
            //----------------------------------------------------------------------------------------
            private void panel1_MouseMove(object sender, MouseEventArgs e)
            {
                if (IsMouseDown)
                    panel1.Location = new Point(panel1.Location.X + e.X - OldX_panel, panel1.Location.Y + e.Y - OldY_panel);
            }
            //----------------------------------------------------------------------------------------
            private void panel1_MouseUp(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                    IsMouseDown = false;
            }
    2009年3月30日 上午 03:49

解答

  • 很多遍的問題,用程式加入EventHandler就可以了
    比如
    在Form Load中加入
    button2.MouseMove += new MouseEventHandler(allMouseMove);
    button1.MouseMove += new MouseEventHandler(allMouseMove);

    另外寫事件內容
      private void allMouseMove(object sender, MouseEventArgs e)
            {
                 '......
           }

    • 已標示為解答 冰糖旋風 2009年3月30日 上午 07:59
    2009年3月30日 上午 04:34
    版主
  • 第一個範例,我是誰.

    private void panel1_MouseMove(object sender, MouseEventArgs e)
            {
                      MessageBox.Show(((Control)(sender)).Name);            
            }

    第二個範例,你是什麼東西.

    private void panel1_MouseMove(object sender, MouseEventArgs e)
            {
                      if(sender is Button)
                     {
                         MessageBox.Show("我是按鈕!");
                     }         
                     if(sender is TextBox)
                     {
            MessageBox.Show("I am a textBox");
          }
            }

    • 已標示為解答 冰糖旋風 2009年3月30日 上午 07:36
    • 已取消標示為解答 冰糖旋風 2009年3月30日 上午 07:59
    • 已標示為解答 冰糖旋風 2009年3月30日 上午 08:00
    2009年3月30日 上午 07:33

所有回覆

  • 很多遍的問題,用程式加入EventHandler就可以了
    比如
    在Form Load中加入
    button2.MouseMove += new MouseEventHandler(allMouseMove);
    button1.MouseMove += new MouseEventHandler(allMouseMove);

    另外寫事件內容
      private void allMouseMove(object sender, MouseEventArgs e)
            {
                 '......
           }

    • 已標示為解答 冰糖旋風 2009年3月30日 上午 07:59
    2009年3月30日 上午 04:34
    版主
  • 大大您好,那如果我可能有不同的控制項,我的意思是可能有button或者panel時那我的程式(黑體),怎麼跟他說我是誰呢,謝謝您
    private void panel1_MouseMove(object sender, MouseEventArgs e)
            {
                if (IsMouseDown)
                    panel1.Location = new Point(panel1.Location.X + e.X - OldX_panel, panel1.Location.Y + e.Y - OldY_panel);
            }
    • 已標示為解答 冰糖旋風 2009年3月30日 上午 07:59
    • 已取消標示為解答 冰糖旋風 2009年3月30日 上午 07:59
    2009年3月30日 上午 07:07
  • 小綠兒:
             這就是Sender的妙用了 
             以你的例子,當目前的MouseMove事件來源是Panel1,其實Sender就是Panel1
             有一個方法提供你測試
             你可以在事件中,將傳入的sender先轉為control類別,然後用control類別的Name屬性來取得其名稱
             就可以在事件中用一個MessageBox來瞧瞧倒底誰引發了這個事件
             提供給你參考
    • 已標示為解答 冰糖旋風 2009年3月30日 上午 07:36
    • 已取消標示為解答 冰糖旋風 2009年3月30日 上午 07:59
    2009年3月30日 上午 07:25
    版主
  • 第一個範例,我是誰.

    private void panel1_MouseMove(object sender, MouseEventArgs e)
            {
                      MessageBox.Show(((Control)(sender)).Name);            
            }

    第二個範例,你是什麼東西.

    private void panel1_MouseMove(object sender, MouseEventArgs e)
            {
                      if(sender is Button)
                     {
                         MessageBox.Show("我是按鈕!");
                     }         
                     if(sender is TextBox)
                     {
            MessageBox.Show("I am a textBox");
          }
            }

    • 已標示為解答 冰糖旋風 2009年3月30日 上午 07:36
    • 已取消標示為解答 冰糖旋風 2009年3月30日 上午 07:59
    • 已標示為解答 冰糖旋風 2009年3月30日 上午 08:00
    2009年3月30日 上午 07:33
  • 各位大大謝謝您们
    2009年3月30日 上午 07:35
  • 好說大大的範例真是簡單明瞭...
    類似像這樣的程式內容,就非常適合當我們想瞭解物件或控制項的作用
    小綠,這招可要學起來多用啊
    2009年3月30日 上午 07:36
    版主
  • 恩恩好我會學起來的,謝謝您们
    2009年3月30日 上午 08:00