当前位置:编程学习 > C#/ASP.NET >>

C#中menu的显示问题

我现在想做这么个事,就是当你点击菜单项时,我要先弹出来MessageBox,根据选择Yes No来决定是否显示相应菜单下的选项。不知道这个怎么做?还望大家帮忙啊!!!
用C#开发的,menu采用的是ToolStripMenuItem。 --------------------编程问答-------------------- 你的问题在哪里啊?ToolStripMenuItem的返回事件不都在一起么,你先弹出MessageBox不就行了? --------------------编程问答-------------------- 现在问题是,我可以在Menu的activate事件里弹message,但是无论我选yes还是no,被选择的菜单项总是被显示。我debug是发现,当我选择菜单时,首先触发的是activate,之后还是会把菜单里的菜单项都显示出来。 --------------------编程问答-------------------- 我现在就想能不能在activate事件之后根据选择的结果来确定还要不要显示菜单里的各项内容了。 --------------------编程问答-------------------- 在线等呢!!!
那位高手快帮帮我啊。 --------------------编程问答-------------------- 使用一个自定义的ToolStripMenuItem

public class MyToolStripMenuItem : ToolStripMenuItem
    {
        protected override void OnMouseDown(MouseEventArgs e)
        {
            if (MessageBox.Show("", "", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                base.OnMouseDown(e);
            }
        }
    }

这样是可以实现你的要求,不过我自己觉得不是很好。等想到更好的办法再贴上来 --------------------编程问答-------------------- 非常感谢!
你的办法我也想过,现在只能用ToolStripMenuItem,不能用自己写的新类。 --------------------编程问答-------------------- 重载 WndProc(ref Message m)在这里面截获点击菜单的事件,这种方法怎么样啊?可是我不知道点击菜单的消息ID是多少阿,实验了也没看出来,查windows消息大全里也没找明白。 --------------------编程问答--------------------
引用 7 楼 Luna100 的回复:
重载 WndProc(ref Message m)在这里面截获点击菜单的事件,这种方法怎么样啊?可是我不知道点击菜单的消息ID是多少阿,实验了也没看出来,查windows消息大全里也没找明白。


这个你也得继承类来实现啊。。。 --------------------编程问答-------------------- 菜单项MouseOver事件/Click事件    //这两个事件任你选
{
   ResultDialog result= MessageBox.Show("你确定要...?");
   if(result==Resultdialog.OKCancel)
   {
      ...//如果点击是,你要做的事
   }
   else
   {
      ...//点击取消,你要做的事
   {
} --------------------编程问答--------------------

//在程序启动时用tempDropDown保存menuItem.DropDown
//ToolStripDropDown tempDropDown;

void menuItem_DropDownOpening(object sender, EventArgs e)
        {
            if (MessageBox.Show("Open menu?", "", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                menuItem.DropDown = null;
            }
            else
            {
                menuItem.DropDown = tempDropDown;
            }
        }
--------------------编程问答-------------------- 回9楼
那个方法不好用,点击后,无论选什么菜单项都回显示出来。

回10楼
你说的那个事件我找不到,不知道怎么相应。 --------------------编程问答-------------------- 那就动态加载呗。 --------------------编程问答--------------------
引用 11 楼 Luna100 的回复:
回9楼 
那个方法不好用,点击后,无论选什么菜单项都回显示出来。 

回10楼 
你说的那个事件我找不到,不知道怎么相应。


10楼的方法可行的。那个事件是menuitem的DropDownOpening事件,你可以在Designer里找到

不过这样做的话,该按钮下的dropdown必须每次被赋值,而不是在Design阶段就被构造好了 --------------------编程问答-------------------- 13楼说的方法,我没试过,我用了个别的方法,继承基类的方法,然后做判断。
谢谢大家的帮忙,谢过了。 --------------------编程问答-------------------- 菜单项MouseOver事件/Click事件    //这两个事件任你选 

  ResultDialog result= MessageBox.Show("你确定要...?"); 
  if(result==Resultdialog.OKCancel) 
  { 
       menuItem.DropDown = null;
  } 
  else 
  { 
       menuItem.DropDown = tempDropDown;
  { 
}
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,