我希望实现一个 Visual Studio 风格的撤消下拉按钮:
我在整个互联网上都看过了,似乎找不到任何真正的实现。
我从 ToolStripSplitButton
开始,但真的不知道从那里去哪里。它的 DropDown
属性是一个 ToolStripDropDown
,但这似乎与选择的多个项目没有任何关系,更不用说滚动和底部的文本了。
所以我想也许整个下拉部分应该是一个基于组合框的自定义控件,而不是默认的 ToolStripDropDown。接下来的问题是,如何使右侧(下拉箭头)按钮执行除显示其默认下拉菜单之外的其他操作?
我走在正确的轨道上吗?谢谢!
最佳答案
是的,我认为您的方向是正确的。在这种情况下,ToolStripControlHost
是您的 friend 。
您不一定需要从它派生(除非您正在制作自己的控件),但请尝试订阅 ToolStripSplitButton 的
DropDownOpening
事件:
工作示例:
private ListBox listBox1;
public Form1()
{
InitializeComponent();
listBox1 = new ListBox();
listBox1.IntegralHeight = false;
listBox1.MinimumSize = new Size(120, 120); \\ <- important
listBox1.Items.Add("Item 1");
listBox1.Items.Add("Item 2");
}
private void toolStripSplitButton1_DropDownOpening(object sender, EventArgs e) {
ToolStripControlHost toolHost = new ToolStripControlHost(listBox1);
toolHost.Size = new Size(120, 120);
toolHost.Margin = new Padding(0);
ToolStripDropDown toolDrop = new ToolStripDropDown();
toolDrop.Padding = new Padding(0);
toolDrop.Items.Add(toolHost);
toolDrop.Show(this, new Point(toolStripSplitButton1.Bounds.Left,
toolStripSplitButton1.Bounds.Bottom));
}
结果如下:
对于您的应用程序,您需要将 ListBox
替换为您自己的 UserControl
,这样您就可以在其中包含任何您想要的内容。 ToolStripControlHost
只能容纳一个控件,设置 MinimumSize
属性很重要,否则放置的控件大小不正确。
关于c# - Visual Studio 风格的撤消下拉按钮 - 自定义 ToolStripSplitButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075040/