2009-12-09 103 views
0

我觉得默认的ContextMenuStrip非常有限,因为它只能包含按钮,并且没有控件。 我很想知道,很长一段时间,我已经尝试过,使用表单,但它从来没有真正解决。如何编写我自己的ContextMenu? C#

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

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

任何暗示将是很好,谢谢。

格雷格疯狂

回答

1

如果您正在寻找允许要显示任何类型的控制在一个自上而下的方式一容器内是定位......你总是可以使用FlowLayoutPanel的使自定义控制。使用它的属性FlowDirection = TopDown和WrapContents = False以保持垂直方式。这将处理您的“菜单”基础知识,并且您的新控件可以从每个控件暴露您希望的任何事件。您将不得不处理显示面板和定位其位置属性的逻辑。

我忘了解决这个问题,在父窗体之外绘图。注意ContextMenus是聪明的,当他们到达他们父母的边界时,他们会从中抽离。您应该从逻辑上以正确的方向(上/下或左/右)从任何鼠标右键单击。根据您对Form的尝试,设置StartPosition = Manual,然后在调用Show()或ShowDialog()之前,将它的Location属性设置为与MouseClick的事件参数中提供的X和Y参数相对应。

+0

太棒了,我不知道StartPosition属性。我想使用表单,因为我不只是想做一个下拉菜单,而是一个新的方法。 我希望光标位于菜单的中心,并由控件的小图片包围。如果您将鼠标悬停在一个上面,它会显示其名称/功能,并通过单击放大它,以便您可以在菜单中设置任何类型的值。 谢谢,:) 格雷格疯狂 – 2009-12-09 18:43:43

2

你的第一个陈述是错误的 - 你可以有一个文本框或组合框在一个公司ntextMenuStrip。

MSDN ToolStripComboBox
MSDN ToolStripTextBox

从设计师有一个小的下拉箭头,当你的鼠标在“在此处输入”框(有时很难点击),将允许您更改类型。