窗口内有一个Button1,双击后自动生成Button1_Click(object sender, EventArgs e)事件结构框架。在我的程序代码中既有要求用户直接点击这个Button1来执行Click事件中的代码,也有在程序中的某处通过语句如:Button1_Click(sender, e); 来执行该事件代码。我希望Button1_Click()能识别到底是人为通过点击Button1执行的呢还是在程序的某处通过Button1_Click(sender, e); 执行的代码,以便在Button1_Click()事件代码中作出不同的处理。形象的表示如下:private void Button1_Click(object sender, EventArgs e); 
{
......
......
if (手工点击按钮进入的)
{
......}
else  //通过 Button1_Click(sender, e); 进入的
{
......}
......
......
}要怎样才能实现上述功能呢?给(object sender, EventArgs e)再加一个参数?具体怎么解决请教各位高手,谢谢!

解决方案 »

  1.   


                if (sender == null)
                {
                    //调用(null,null)
                }
                else
                {
                    //手工
                }
      

  2.   

    手工调用时:Button1_Click(null, null); 就像一般方法的调用一样
    人为点击时object sender, EventArgs e,由于事件驱动的机制,所以这两个都是不为空的
    这样你可以在Click方法内判断sender是否为null来加以区分
      

  3.   

    另外写个事件,
    private void Button1_Click(object sender, EventArgs e);  
    {
       btn_click(sender,e,1);
    }
    private void btn_click(object sender, EventArgs e,int sendType)
    {
        if(sendType==1)
        {
         .......//用户点击按钮
        }
        else(sendType==2)
        {
         ......//方法调用
        }
    }
      

  4.   

    在程序中的某处通过语句调用:
    string strObject="我是人";
    Button1_Click(strObject, null);private void Button1_Click(object sender, EventArgs e); 
    {
    if (//用sender.tostring=我是人或者e=null判断)
    {
    }
    else 
    {
    }}
      

  5.   

     if (sender == null)
                {
                    //调用(null,null)
                }
                else
                {
                    //手工
                }
      

  6.   

    把要做的事情封装成方法,由方法所做的事情决定放到业务层还是UI层。
    public void DoSomething()
    {
    }按钮单击事件,和别的的地方都调用这个方法。private void button1_Click(object sender, EventArgs e)  
    {
        //这里添加按钮执行时候的代码
        DoSomething();
    }private void OtherMethod();  
    {
        //这里添加另外的代码
        DoSomething();
    }
      

  7.   

    1楼或3楼的办法都可以的。
    在程序中调用Button1_Click的时候,传入的参数是null和null就可以了。
      

  8.   

    给Button事件的方法,增加参数是不可能的,只能利用现有参数,或者一个全局的标志位进行处理判断。
      

  9.   

    在调用的过程中使用sender 或e参数时就不行了
    我的未结帖子:http://topic.csdn.net/u/20110218/00/13559382-3887-41ba-8e07-b6f510228d41.html
      

  10.   

    能否在编写事件处理过程代码时,不使用sender或e,如果这样,传入的参数是null和null就可以了。
      

  11.   

    以下是从网上搜来的,不知道可用否继承button,然后增加事件
    并且自定义EventArg思路:
    class MyEventArg :EventArg
    {
       public long MyNum
       {
        set{ myNum = value;}
        get{ return myNum; }
       }
       private long myNum ;
    }class MyButton:System.Windows.Forms.Button
    {
       public delegate void MyClick(object sender,MyEventArg e);
       public event MyClick OnMyClick;
       private MyEventArg myE = new MyEventarg();
            
    protected override void OnClick(EventArgs e)
            {
                if(OnMyClick != null)
    {
       OnMyClick(null,myE);
    }
                base.OnClick(e);
            }   
    }