在做winform程序时,在button按下,处理时,在点button就不好用了怎么做啊??我现在做的效果是
即使button不好用了,我点击button,等button好用了就马上又执行了button事件。好像记录了我button
的点击一样。求各位大虾指教。在button处理时所有的点击都无效???我现在做的是:
        /// <summary>
        /// 表示按钮処理
        /// </summary>
        private void BtnHyoJi_Click(object sender, EventArgs e)
        {                    // 連打処理:start
                    buttonHandle(0);
                    
                    // 业务处理
                    CallTransaction(null, null);                    // 連打処理:end
                    buttonHandle(1);
        }        /// <summary>
        /// 連打対応
        /// </summary>
        private void buttonHandle(int pattern)
        {
            switch (pattern)
            {
                case 0:
                    // 设置鼠标 并让button不好用
                    Cursor.Current = Cursors.WaitCursor;
                    BtnHyoJi.Enabled = false;
                    BtnPrint.Enabled = false;
                    break;
                case 1:
                    // 让button好用,并设置鼠标
                    BtnHyoJi.Enabled = true;
                    BtnPrint.Enabled = true;
                    Cursor.Current = Cursors.Default;
                    break;
            }
        }

解决方案 »

  1.   

    我有点明白了 LZ你看是不是这样的,相当于分页
    用linkbotton
    -------------------------------------
            public int Pages
            {
                get { return int.Parse(ViewState["page"].ToString()); }
                set { ViewState["page"] = value; }
            }
            当你用的时候
            pages+1;
           不用的时候pages-1;
           然后用switch(pages)
           
      

  2.   

    意思就是,因为button的处理需要些时间,所以我在点击button后将button的Enabled设置成false,画面上显示成灰色,但我点击灰色的button,等我处理完事件后,就会又一次执行我上次的点击处理,我不清楚是不是winform中有记录鼠标动作的处理啊??
      

  3.   

    private void BtnHyoJi_Click(object sender, EventArgs e)
      {BtnHyoJi.Enabled = false;
      BtnPrint.Enabled = false;
    }
    等你所有的操作完成之后再设置成真
    再看下你这个方法是不是多线程的
      // 业务处理
      CallTransaction(null, null);如果是的话不应该在这里设置成真
      buttonHandle(1);
    应该在这个线程结束之后!
      

  4.   

    木有啊
    这个也容易啊
    在执行方法前将botton的Enable设置为false
    相当于这样
    public void AA_Click(object sender, EventArgs e)
    {
         //开始将Enable设置为false
         ........
         //结束了再设置为true就好了撒
    }
      

  5.   

    再或者再定义一个按钮专门设置另一个按钮的Enable的属性
      

  6.   

    目的就是想实现,在button处理的时候 所有的点击都无效
      

  7.   

    我就是这么做的,但是在button.Enable = false 后,画面上是灰掉了,但是点击灰色的button,等button.Enable = true后,马上就会执行“刚才灰色button那个点击事件”,我也不理解是怎么回事??就好像你打开一个文件夹,在打开的途中你的电脑卡了,然后你有点了几下文件夹,等不卡的时候,就会打开好几个文件夹,效果就是这样的。有高人解释下为什么吗???
      

  8.   

    button的Enabled设置成false  点击无效
      

  9.   

    我刚做了一个测试,LZ是不是在业务逻辑里有循环而且少了这句话Application.DoEvents();?
                       b = true;
                button1.Enabled = false;
                for (int i = 0; i < 10;i++ )
                {
                    this.Text = DateTime.Now.ToString();
                     Application.DoEvents();
                    Thread.Sleep(100);
                }
                button1.Enabled = true;
      

  10.   

    你可以把那句注释掉测一下,完全和你的情况一样
    大概是你的主线程死循环时没办法响应外部消息,所以其他消息被阻塞了,等到循环结束时外部消息可以被处理,但此时button1.Enabled = true;所以又被执行一次吧
      

  11.   

    恩意思就是你说的那样,但是我的不是循环,而是在服务器上取数据,用Application.DoEvents();好像解决不了??
      

  12.   

    有点明白你的意思了
    我想可不可以用 Api 记录你的鼠标按键及事件回应信息呢,把没有回应的次数记录下来
    然后调用相应的事件处理,把消息发出去,就相当于延时点击了。
    有点复杂,先提个建议,看是否可行。
      

  13.   

    CallTransaction(null, null);
    把这句放在线程里执行
      

  14.   

    这句运行前加个判断
    if (button1.enable==true)
    CallTransaction(null, null);
      

  15.   

    事件解绑定。
    public void AA_Click(object sender, EventArgs e)
    {
    AA.Click -= new System.EventHandler(AA_Click);
    ........
    AA.Click += new System.EventHandler(AA_Click);
    }
      

  16.   

    你这个只有用多线程来解决,默认的WinForm程序是单线程的,所以当你在执行一次点击事件的时候,程序是不会相应你的其它请求的,所以你的代码里面应该新建一个线程来执行的你按钮点击的处理代码。这样才能记录你的多次点击记录。而在点击时,你不能设置button的Enabled为false,这样不能触发事件,建议你在界面类里面新增一个变量用于存储触发的次数。每次线程执行完成则清除变量中的一个记录,
      

  17.   

    这楼里的人们咋都这搞。。三分之二的人都把楼主的意思理解反
    楼主想避免的是连击事件的发生,类似于Web里的避免二次提交
    8过,这WinForm这种情况我没遇到过,正常来说button.Enable = false;后是不会响应点击事件的,
    难道楼主的手比button.Enable = false语句执行的还快? 呵呵。