实现菜单不难的吧,在点击按钮里,实现ContextMenu.Show就可以了吧,如果要针对不同按钮操作不同对象,试一下使用它的Tag属性Button1_Click
{
  YourMenu.Tag = CheckBoxList1;
  YourMenu.Show(...);
}Button2_Click
{
  YourMenu.Tag = CheckBoxList2;
  YourMenu.Show(...);
}HandleSelect
{
  CheckBoxList cbl = (CheckBoxList)YourMenu.Tag;
  
}但好像不用那么复杂吧,主要的就是全选和全不选,在你的复选框列表上方加一个复选框不就可以了么,选这个复选框就是全选,去选这个复选框就是全不选

解决方案 »

  1.   

    是不是可以这样:只设置一个菜单及其子项,将这个菜单依次设置到每个控件的ContextMenu属性上,这样会使这些控件都使用同一个菜单.然后在菜单子项的Click事件里可以通过如下的属性来确定是在哪一个控件上弹出的菜单,由此得到不同的处理,属性如下:
    ContextMenu.SourceControl 属性参考代码:
    private void MyPopupEventHandler(System.Object sender, System.EventArgs e)
    {
      ContextMenu menu = sender as ContextMenu;
      if (menu.SourceControl == button1)
      {  }
      else
      {
     
       }
    }
      

  2.   

    思归的方法比较好。
    或者在窗体里另用个变量保存当前的CheckBoxList,虽然多了一个变量但是更可靠。
      

  3.   

    hbxtlhx方法更现实。我建议这样子,我使用的是ContextMenuStrip。使用一个就好了,将他动态的绑定到某一个button上,如:button2.ContextMenuStrip = contextMenuStrip1;绑定后右键单击就会显示的。左键只需按正常的click事件解决就好了。剩下的就很容易了吧。ContextMenuStrip的事件Opening可以得到参数sender,判断点击的是button1还是button2,分别处理就好啦
      

  4.   

    判断了之后呢?还是对两个CheckBoxList分别处理?