本文为你讲解了C# Button下拉菜单实现的思路,步骤及代码!笔者讲述的很清楚,很有条理,实用性很强的。主要的思路还是在于要把ContextMenuStrip控件实例与按钮关联,并取消按钮的右击事件。
C# Button实现下拉菜单为实现这个功能, 花费的时间太长了, 觉得本人真够笨. 回过头来看, 其实很简单的东西!
在项目中,要用到按钮实现下拉菜单的功能,而且是在MDI窗体中。当菜单的显示范畴超出MDI窗体的工做区时,就要换另一显示方式,不至于显示混乱。如图:
实现C# Button下拉菜单
实现C# Button下拉菜单
(发觉一问题,如果把Form1拉到像Form3的大小,还会出现图一的情况。客户没这么邪吧)
C# Button下拉菜单实现思路:
1、要把ContextMenuStrip控件实例与按钮关联
2、取得MDI工做区的大小
3、取消按钮的右击事件(因为与ContextMenuStrip相关系的控件右键都会响应且显示)
4、鼠标单击时设置菜单显示位置
C# Button下拉菜单实现步骤:
1、创建用户控件,且用户控件承继自Button类
2、定义ContextMenuStrip对象
3、定义显示ContextMenuStrip对象立标point
4、重写按钮单击事件和ContextMenuStrip属性(设置与之关联的ContextMenuStrip实例用到),还有重写鼠标右击事件,使其不响应任何操做
C# Button下拉菜单代码:
以上讲述了实现C# Button下拉菜单的思路、步骤及代码,希望能给大家带来帮助。
- ///
- /// 说明: 使用此Button时要设置ContextMenuStrip属性值
- /// 单击些Button的Click事件要传入所在工做区的宽高
- /// 如果没有所需的属性值,则如平时所使用的Button一至
- /// 使用例子:
- /// DropButton.WorkSizeX =
this.MdiParent.ClientRectangle.Width;- /// DropButton.WorkSizeY =
this.MdiParent.ClientRectangle.Height;- /// 应用:
- /// 创建人: lrj
- /// 创建日期:2008-05-22
- /// 修改人:
- /// 修改日期:
- ///
- public partial class DropButton : Button
- {
- private ContextMenuStrip contextMenuStrip;
- private Point point; //立标
- private int x = 0; //立标x
- private int y = 0; //立标y
- private int workSize_x;//工做区x
- private int workSize_y;//工做区y
- public DropButton()
- {
- InitializeComponent();
- x = this.Size.Width ;
- y = 0;
- }
- ///
- /// 工做区的完
- ///
- public int WorkSizeX
- {
- get { return workSize_x; }
- set { workSize_x = value; }
- }
- ///
- /// 工做区的高
- ///
- public int WorkSizeY
- {
- get { return workSize_y; }
- set { workSize_y = value - 55; }
- }
- ///
- /// ContextMenuStrip菜单
- ///
- public override ContextMenuStrip ContextMenuStrip
- {
- get { return contextMenuStrip; }
- set
- {
- if (contextMenuStrip != null)
- {
- contextMenuStrip = value;
- }
- }
- }
- //
- //重写的单击事件
- //
- protected override void OnClick(EventArgs e)
- {
- base.OnClick(e);
- //菜单在工做区离边框的宽高
- int _x = this.Parent.Location.X + this.Location.X +
this.Size.Width + contextMenuStrip.Size.Width;- int _y = this.Parent.Location.Y + this.Location.Y +
contextMenuStrip.Size.Height ;- if
- (_x < WorkSizeX - 8)
- {
- x = this.Size.Width;
- }
- else
- {
- x = 0 - contextMenuStrip.Size.Width;
- }
- if
- (_y < WorkSizeY)
- {
- y = 0;
- }
- else
- {
- y = 0 - contextMenuStrip.Size.Height + this.Size.Height;
- }
- point =
- new Point(x, y);
- contextMenuStrip.Show(this, point);
- }
- //
- //使鼠标右键失效
- //
- protected override void OnMouseDown(MouseEventArgs mevent)
- {
- base.OnMouseDown(mevent);
- if (mevent.Button.ToString() != "Right")
- {
- }
- }
- }
【编辑推荐】