我怎样才能编写自己的ContextMenu? C#

时间:2009-12-09 16:03:29

标签: c# contextmenu contextmenustrip

我觉得默认的ContextMenuStrip非常有限,因为它只能包含按钮,而且没有控件。 我想知道很长一段时间,我已经尝试过,使用表格,但它从来没有真正成功。

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

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

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

Greg the Mad

2 个答案:

答案 0 :(得分:2)

你的第一个陈述是假的 - 你可以在ContextMenuStrip中有一个TextBox或一个ComboBox。

MSDN ToolStripComboBox
MSDN ToolStripTextBox

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

答案 1 :(得分:1)

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

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