【问题标题】:How can I write my own ContextMenu? C#如何编写自己的 ContextMenu? C#
【发布时间】:2009-12-09 16:03:29
【问题描述】:

我觉得默认的 ContextMenuStrip 很受限制,因为它只能包含按钮,而不能包含控件。 我想了很长时间,我已经尝试过,使用表单,但从未真正成功。

我已经有了关于如何设置整个事情的想法,包括事件和项目。我唯一的问题是绘画方法。 当您打开一个 ContextMenu (ContextMenuStrip) 时,您可以设置它在鼠标光标上的位置,它会在那里,即使这意味着它超出了活动表单。 (所以我不能将 Controls 类用作继承,因为它们只能将自己绘制为表单的一部分。 现在我想使用 Form Class 作为我的 ContextMenu 的基础,但是那些随机放置在屏幕上的。

所以我真正需要的是一个类(或类似的东西),它可以自己绘制,没有问题,并且可以准确地放置在屏幕上。

任何提示都会很好,谢谢。

疯子格雷格

【问题讨论】:

    标签: c# contextmenu contextmenustrip


    【解决方案1】:

    您的第一个陈述是错误的——您可以在 ContextMenuStrip 中有一个 TextBox 或一个 ComboBox。

    MSDN ToolStripComboBox
    MSDN ToolStripTextBox

    当您的鼠标位于“在此处输入”框(有时很难单击)时,设计器会显示一个小的下拉箭头,可让您更改类型。

    【讨论】:

      【解决方案2】:

      如果您希望任何 类型的控件在容器内以自上而下的方式显示以进行定位...您始终可以使用 FlowLayoutPanel 制作自定义控件。使用它的属性 FlowDirection=TopDown 和 WrapContents=False 来保持垂直方法。这将处理您的“菜单”基础知识,并且您的新控件可以从每个控件公开您希望的任何事件。您还必须使用其 Location 属性处理显示面板和定位的逻辑。

      我忘了解决在父表单之外绘图的问题。请注意,ContextMenus 很聪明,当它们到达父级的边界时,它们会远离它。从逻辑上讲,您应该能够通过任何鼠标右键单击以正确的方向(上/下或左/右)绘制。根据您对表单的尝试,设置 StartPosition=Manual 然后在调用 Show() 或 ShowDialog() 之前将其 Location 属性设置为对应于 MouseClick 事件参数中提供的 X 和 Y 参数。

      【讨论】:

      • 太好了,我不知道 StartPosition 属性。我想使用表格,因为我不只是想制作一个下拉菜单,而是一种新的方法。我希望光标位于菜单的中心,周围是控件的小图片。如果您将鼠标悬停在一个上,它会显示其名称/功能并通过单击放大它,因此您可以在菜单中设置任何类型的值。谢谢,:) 疯子格雷格
      猜你喜欢
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多