我想实现根据鼠标右击的位置分配不同的ContextMenuStrip怎么实现private void picB_Main_MouseClick(object sender, MouseEventArgs e)
{
    if(e.Button == MouseButtons.Right) //鼠标右击
    {
        if( picB_Main.Image != null )
        {
            if (在位置范围1里面)
            {
                picB_Main.ContextMenuStrip = ctxtMS_one;
            }
            else if (在位置范围2里面)
            {
                picB_Main.ContextMenuStrip = ctxtMS_two;
            }
            else
            {
                picB_Main.ContextMenuStrip="等于空这个时候不能用none了,怎么办啊?";
            }
        }
    }            
}问题就出在响应鼠标点击时间好象在ContextMenuStrip之后进行的,也就是说我这样一来的结果会传到下次右击时才生效,怎么修正啊?

解决方案 »

  1.   

    thanks!不过ContextMenuStrip=null在我这里效果不太理想,好象释放不了.
    主要问题还是这个:问题就出在响应鼠标点击时间好象在ContextMenuStrip之后进行的,也就是说我这样一来的结果会传到下次右击时才生效,怎么修正啊?
      

  2.   

    ContextMenuStrip有个opening事件,用它试一下!
      

  3.   

    窗体左上部分显示contextMenuStrip1,右下部分显示contextMenuStrip2,其余部分没有private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    if (PointInRectangle(e.Location, new Rectangle(0, 0, this.Width / 2, this.Height / 2)))
                    {
                        this.ContextMenuStrip = contextMenuStrip1;
                    }
                    else if (PointInRectangle(e.Location, new Rectangle(this.Width / 2, this.Height / 2, this.Width / 2, this.Height / 2)))
                    {
                        this.ContextMenuStrip = contextMenuStrip2;
                    }
                    else
                    {
                        this.ContextMenuStrip = null;
                    }            }
            }
      

  4.   

    都不行啊!兄弟们.都是先右击鼠标,而后改变下ContextMenuStrip,再在下次右击的时候显示的这次的ContextMenuStrip.我要的是本次的,不能邂逅到下一次.
      

  5.   

    刚才太粗心了,在别的地方出了点错误,所以延误了些.其实经不太严格测试用mousedown是能解决问题的.谢谢大家!