1

我有一个带有未编号项目和上下文菜单的列表框。我写了这段代码(我知道它看起来太原始了,因为我不熟练)它工作得很好,但我有一个小问题。当您单击列表框中的项目时,我想让 cms 在您的鼠标位置附近打开。当您单击空白时,它将在先前的位置打开。没关系,但每次点击都会重新打开 cms。当您单击空白而不是项目时,是否可以使其保持打开状态?

     public Form1()
    {
        InitializeComponent();
    }
    int a, b, tx, ty;
    int mx=0;
       private void listBox1_MouseClick(object sender, MouseEventArgs e)
    {
        b = a;
        a = listBox1.SelectedIndex;         

     if (listBox1.SelectedIndex != -1)
        {            
            if (a!= b)
            {

                contextMenuStrip1.Show(MousePosition.X + 10, MousePosition.Y);

                tx = MousePosition.X;
                ty = MousePosition.Y;
                mx =1;
            }
            else if (a==0 && b==0 && mx== 0)
            {
                tx = MousePosition.X;
                ty = MousePosition.Y;

                contextMenuStrip1.Show(tx + 10, ty);
                mx = 1;
            }
            else
            {
                contextMenuStrip1.Show(tx + 10, ty);
            }
        }       
    }
4

1 回答 1

1

使用AutoClose属性ContextMenuStrip来防止它自动关闭。

ContextMenuStrip cms = new ContextMenuStrip();
cms.AutoClose = false;

然后调用Close方法手动关闭它

cms.Close();

或者根据你的情况处理Closingcontextmenustrip 和设置的事件e.Cancel = true

 void cms_Closing(object sender, ToolStripDropDownClosingEventArgs e)
 {
     if(your condition)
     {
         e.Cancel = true;
     }
 }
于 2013-09-29T12:45:01.907 回答