none
按鈕_滑鼠按住的判斷_c# RRS feed

  • 問題

  • 想請問..我想寫一個按鈕,

    按住時會有一連串的動作(不需要move)

    直到放開才會解除動作

    自己有想說用System.Windows.Input中的

    Mouse.leftButton去抓左鍵的狀態

    但是卻怎麼按他的狀態都是Release

    無法去判斷滑鼠是不是按住的

    想請問一下這方面是需要用的什麼樣的事件和判別嗎?

    謝謝指教
    2009年5月5日 上午 06:09

解答

  • 在Mouse Down的狀態呼叫一個子執行緒,子執行緒內部程序是個無窮迴圈應該就可以辦到
    一個簡單的Sample
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;

    namespace MousePressTest
    {
        public partial class Form1 : Form
        {
            private Thread t;
            public Form1()
            {
                InitializeComponent();
            }
            private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
               t = new Thread(new ThreadStart(ThreadProc));
               t.IsBackground = true;
               t.Start();
            }

            private void Form1_MouseUp(object sender, MouseEventArgs e)
            {
                t.Abort();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                CheckForIllegalCrossThreadCalls = false;
            }
            public  void ThreadProc()
            {
                int i;
                i = 0;
                while (true)
                {
                    label1.Text = System.Convert.ToString(i);
                    i++;
                }
          }

        }
    }

    • 已標示為解答 Lolota Lee 2009年5月11日 上午 05:28
    2009年5月5日 上午 06:49
    版主
  • 最笨,也是最聰明的做法.
    你去設一個bool 去存狀態.
    Mouse_Down 事件將 bool 設 true.
    Mouse_Up 時設false
    • 已標示為解答 Lolota Lee 2009年5月11日 上午 05:28
    2009年5月5日 上午 07:07
  • 不是用Capture?!
    .NET Framework 類別庫
    Control.Capture 屬性

    取得或設定值,指出控制項是否捕捉住滑鼠。


    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 Lolota Lee 2009年5月11日 上午 05:33
    2009年5月5日 上午 08:11

所有回覆

  • 是的...我是用MouseDown來判斷按下去

    但是我需要一個按住的判斷

    來判斷我是不是按住or放開

    2009年5月5日 上午 06:45
  • 在Mouse Down的狀態呼叫一個子執行緒,子執行緒內部程序是個無窮迴圈應該就可以辦到
    一個簡單的Sample
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;

    namespace MousePressTest
    {
        public partial class Form1 : Form
        {
            private Thread t;
            public Form1()
            {
                InitializeComponent();
            }
            private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
               t = new Thread(new ThreadStart(ThreadProc));
               t.IsBackground = true;
               t.Start();
            }

            private void Form1_MouseUp(object sender, MouseEventArgs e)
            {
                t.Abort();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                CheckForIllegalCrossThreadCalls = false;
            }
            public  void ThreadProc()
            {
                int i;
                i = 0;
                while (true)
                {
                    label1.Text = System.Convert.ToString(i);
                    i++;
                }
          }

        }
    }

    • 已標示為解答 Lolota Lee 2009年5月11日 上午 05:28
    2009年5月5日 上午 06:49
    版主
  • 謝謝指教..

    我懂了..
    2009年5月5日 上午 07:06
  • 最笨,也是最聰明的做法.
    你去設一個bool 去存狀態.
    Mouse_Down 事件將 bool 設 true.
    Mouse_Up 時設false
    • 已標示為解答 Lolota Lee 2009年5月11日 上午 05:28
    2009年5月5日 上午 07:07
  • 不是用Capture?!
    .NET Framework 類別庫
    Control.Capture 屬性

    取得或設定值,指出控制項是否捕捉住滑鼠。


    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 Lolota Lee 2009年5月11日 上午 05:33
    2009年5月5日 上午 08:11