C# 自定义关联菜单
我想创建一个自定义上下文菜单。其想法是创建一个带有文本框、按钮和标签列表的面板,并能够在右键单击时显示它,使其行为完全类似于上下文菜单。我可能可以使用无边框的表单,但我想可能有一个类可以派生出来,它可以帮助我处理上下文菜单和着色的位置。有什么想法吗? 多谢各位C# 自定义关联菜单,c#,.net,winforms,C#,.net,Winforms,我想创建一个自定义上下文菜单。其想法是创建一个带有文本框、按钮和标签列表的面板,并能够在右键单击时显示它,使其行为完全类似于上下文菜单。我可能可以使用无边框的表单,但我想可能有一个类可以派生出来,它可以帮助我处理上下文菜单和着色的位置。有什么想法吗? 多谢各位 编辑:一个澄清一些想法的示例:假设您的表单上有一个标签,当您右键单击它,甚至左键单击它时,会出现一个菜单。这个菜单不是经典的上下文菜单,而是一个带有我自己创建的控件的自定义面板。例如,顶部带有项目列表的搜索框。当您输入字母时,列表将被修剪
编辑:一个澄清一些想法的示例:假设您的表单上有一个标签,当您右键单击它,甚至左键单击它时,会出现一个菜单。这个菜单不是经典的上下文菜单,而是一个带有我自己创建的控件的自定义面板。例如,顶部带有项目列表的搜索框。当您输入字母时,列表将被修剪为匹配的项目,当单击某个项目时,关联菜单将消失,所选的值将显示在我们第一次单击的标签中。最简单的方法是创建一个无边框表单并向其添加阴影:
public class ShadowForm : Form
{
// Define the CS_DROPSHADOW constant
private const int CS_DROPSHADOW = 0x00020000;
// Override the CreateParams property
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
}
关于立场,没有太多的东西。只需检查游标。使用MouseUp事件处理程序中的参数定位或设置坐标
完整的代码如下所示:
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
protected override OnMouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
var menu = new CustomMenu();
menu.Location = PointToScreen(e.Location);
menu.Show(this);
}
}
}
至于菜单形式:
public partial class CustomMenu : Form
{
public CustomMenu()
{
InitializeComponent();
this.StartPosition = FormStartPosition.Manual;
}
private const int CS_DROPSHADOW = 0x00020000;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
protected override void OnLostFocus(EventArgs e)
{
this.Close();
base.OnLostFocus(e);
}
}
您可以使用此处描述的方法: 由于它使用ContextMenuStrip,您可以设置其位置:
contextMenuStrip1.Show(Cursor.Position);
阴影效果:
我想你说的是Winforms?显然你错过了工具箱中的ContextMenuStrip控件。不,我没有错过,我想创建我自己的控件,它做的更多,然后从众多项中选择一项。是的,这是关于c语言中的winforms。我会像你写的那样创建一个自定义的无边框表单。它是包含自定义菜单项的实际上下文菜单,还是根本不是菜单?为了得到建议,你应该解释一下它的行为和外观。我在想,通过从某个类派生,我的自定义菜单可以像设计模式中的ContextMenu一样使用。但是,是的,我同意这可以完成这项工作。非常感谢。当您在上下文菜单外单击时,它将消失,在您的示例中,您将如何处理此问题?