如何设置控件相对于Form的位置?解决ContextMenuStrip显示位置异常问题
你遇到的问题根源在于:控件的Location属性返回的是相对于父容器的坐标,但ContextMenuStrip.Show(Point)方法默认接收的是屏幕绝对坐标,两者坐标系不匹配,才导致菜单跑到屏幕角落。
给你两种实用的解决方式:
方式一:转换控件坐标为屏幕坐标
如果要让菜单显示在labelDataBase正下方,先把控件底部的相对坐标转换成屏幕坐标,再传递给Show方法:
// 获取labelDataBase底部左侧的屏幕坐标 var targetPos = labelDataBase.PointToScreen(new Point(0, labelDataBase.Height)); contextMenuStripButton1.Show(targetPos);
方式二:使用关联控件的重载方法(更推荐)
既然是点击按钮触发菜单,直接用Show的重载方法,指定关联按钮和相对于按钮的位置,无需手动转换坐标:
// 让菜单显示在按钮正下方((0, button.Height)是按钮底部左侧的相对位置) contextMenuStripButton1.Show(你的按钮控件名, new Point(0, 你的按钮控件名.Height));
这种方式更省心,菜单会自动跟随控件位置变化,哪怕控件在容器内移动也不会错位。
内容的提问来源于stack exchange,提问作者Елизавета Левина
相关产品推荐
相关产品推荐

