一个Windows应用程序.
包含控件:1个textbox,2个button:button1和button2,1个右键菜单ContextMenuStrip,菜单里有一个ITEM名字为START.
在button 1 和button 2点击右键,选择ContextMenuStrip里的START.
在textbox里显示一行字符 : "[Button 1] START DO SOMETHING" 
                        "[Button 2] START DO SOMETHING"
说明:button 1和button 2的右键菜单是同一个.字符串中的START DO SOMETHING都是调用同一个函数得到的.
要求:在字符串里区分是哪个button所触发的.
提示:调用带参数的线程.

解决方案 »

  1.   

    Page_Load(object sender, EventArgs e)
    事件方法都有两个参数,一个事件的产生者,一个是事件
    你可以根据这个sender来判断,如你可以判断它名称:如果是button1则xxx
      

  2.   


    右击事件调用函数Button_Click(object   sender,   EventArgs   e),
    两个按扭右击都调用这个函数.
    事件方法都有两个参数,一个事件的产生者,一个是事件 
    你可以根据这个sender来判断,如你可以判断它名称:如果是button1则xxx
      

  3.   


    START_Click(object   sender,   EventArgs   e) 
    {
       textbox.text="["+((Butten)sender).Text+"]   START   DO   SOMETHING";
    }大概就是这个样子,你看看行不行。
      

  4.   

    被允一下:
    我上面说的有些错误
    有两种方法:
    1\最简单的方法就是使用两个右键菜单;
    2\动态生成右键菜单,例子:
    private void button1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    Button button1 = (Button)sender;
                    button1.ContextMenuStrip = null;
                    ContextMenuStrip rightMenu = new ContextMenuStrip();
                    rightMenu.Items.Add(new ToolStripMenuItem("button1的右键",null,new System.EventHandler(this.button1_right_onclick)));
                    button1.ContextMenuStrip = rightMenu;
                   // rightMenu.Show();
                }
                else
                    return;
            }
            private void button1_right_onclick(object sender, EventArgs e)
            {
                return;
            }
    //VC#的右键有点麻烦要判断一下
    //你也可以只响应Form/panel的MouseDown,然后通过判断sender的方式,来决定事件响应方法
    //if(sender.text="button1")xx;
      

  5.   

    private void Button_Click(object sender, EventArgs e)
    {
        string strButtonName = ((System.Windows.Forms.Button)sender).Name;
        switch (strButtonName)
        {
          case "button1":
                this.****(); //在字符串里区分是哪个button所触发的
                break;
          case "button2":
                this.****(); //在字符串里区分是哪个button所触发的
                break;
        }
    }
    主要是取到button的name然后你想怎么操作都可以。
      

  6.   

    刚才忘了说 button1 和 button2 的 click 事件必须绑定 Button_Click()方法。
      

  7.   

    再补充:(可以无视)
    1和2都会同时存在两个菜单-_-;
    可以将rightMenu设为成员变量,每次只更改其事件响应;  
     rightMenu.Items[0].Click -= this.button1_right_onclick;//去掉旧的响应
    rightMenu.Items[0].Click += new System.EventHandler(this.button1_right_onclick); //加上新的响应例如:
    private   void   button1_MouseDown(object   sender,   MouseEventArgs   e) 
      { 
                            if   (e.Button   ==   MouseButtons.Right) 
                            { 
                                   // button1.ContextMenuStrip   =   rightMenu; 这个是前提;                               this.rightMenu.item[0].Click -= this.button1_right_onclick;//去掉旧的响应
                                       this.rightMenu.item[0].Click += new System.EventHandler(this.button1_right_onclick); //加上新的响应
                      
                            } 
                            else 
                                    return; 
      } 
                    private   void   button1_right_onclick(object   sender,   EventArgs   e) 
                    { 
                            return; 
                    } 
    //这样就只会同时存在一个菜单说了这么多,我也刚学的,有什么问题,指出来哈
      

  8.   

    不好意思刚刚醒.时间等不及了.我把贴结了.
    感谢colonist,windily,Ericjacking
    同时接受zjmotion的批评.
    特别鸣谢:wumingbing_8027,以后请多光顾我的帖子~
    给分了 ~