C# 如何将两个ToolStripComboBox和分隔符水平添加到一个ToolStripDropMenuItem?

C# 如何将两个ToolStripComboBox和分隔符水平添加到一个ToolStripDropMenuItem?,c#,winforms,toolstrip,toolstripdropdown,toolstripitem,C#,Winforms,Toolstrip,Toolstripdropdown,Toolstripitem,我认为这应该很简单。但我还没看到。我想做一些类似的事情: 下拉菜单->下拉菜单项1[ComboBox1[|]Combox2],下拉菜单项2[…],下拉菜单项3[…] 我在ToolStrip中使用ToolStripDropDownButton。我正在编程。谢谢你的建议 比如: 致意使用向导并查看最终代码: // // toolStrip1 // this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { t

我认为这应该很简单。但我还没看到。我想做一些类似的事情:

下拉菜单->下拉菜单项1[ComboBox1[|]Combox2],下拉菜单项2[…],下拉菜单项3[…]

我在ToolStrip中使用ToolStripDropDownButton。我正在编程。谢谢你的建议

比如:


致意

使用向导并查看最终代码:

// 
// toolStrip1
// 
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripComboBox1,
this.toolStripComboBox2,
this.toolStripSeparator1,
this.toolStripDropDownButton1});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(771, 25);
this.toolStrip1.TabIndex = 2;
this.toolStrip1.Text = "toolStrip1";
// 
// toolStripComboBox1
// 
this.toolStripComboBox1.Name = "toolStripComboBox1";
this.toolStripComboBox1.Size = new System.Drawing.Size(121, 25);
// 
// toolStripComboBox2
// 
this.toolStripComboBox2.Name = "toolStripComboBox2";
this.toolStripComboBox2.Size = new System.Drawing.Size(121, 25);
// 
// toolStripSeparator1
// 
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
// 
// toolStripDropDownButton1
// 
this.toolStripDropDownButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.toolStripDropDownButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripDropDownButton1.Image")));
this.toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripDropDownButton1.Name = "toolStripDropDownButton1";
this.toolStripDropDownButton1.Size = new System.Drawing.Size(29, 22);
this.toolStripDropDownButton1.Text = "toolStripDropDownButton1";

您似乎正在寻找这样的布局:

为此,不需要创建任何自定义控件。只需使用
ToolStrip
的常见功能即可。您需要将属性设置为合适的值

示例

private void Form1_Load(object sender, EventArgs e)
{
    var dropdown = new ToolStripDropDown();

    //Define style
    dropdown.LayoutStyle = ToolStripLayoutStyle.Table;
    var settings = (dropdown.LayoutSettings as TableLayoutSettings);
    settings.ColumnCount = 3;

    //First Item    
    var item1 = new ToolStripMenuItem("Some Sub Menu");
    dropdown.Items.Add(item1);
    settings.SetColumnSpan(item1, 3); //Set column span to fill the row

    //First Combo
    var combo1 = new ToolStripComboBox("combo1");
    combo1.Items.AddRange(new string[] { "Item1", "Item2", "Item3" });
    dropdown.Items.Add(combo1);

    //Separator
    dropdown.Items.Add("-");

    //Second Combo
    var combo2 = new ToolStripComboBox("combo2");
    combo2.Items.AddRange(new string[] { "Item1", "Item2", "Item3" });
    dropdown.Items.Add(combo2);

    //Last item
    var item2 = new ToolStripMenuItem("Some Othe Sub Menu");
    dropdown.Items.Add(item2);
    settings.SetColumnSpan(item2, 3); //Set column span to fill the row

    toolStripDropDownButton1.DropDown = dropdown;
}

你是通过代码还是设计师来实现的?嗨,吉姆,我是由设计师设计的,我的下拉列表就是这样的。但是我喜欢把第二个combobox2放在combobox1旁边。我不知道你是否明白。你的意思是你想在同一个下拉项目中有两个组合框吗?请原谅我的照片。我画了xd。比如:嗨,mcNets,我有这样的代码。但是我喜欢将第二个combobox2放在combobox1旁边,我不希望combobox1位于combobox2之上(项目的水平对齐不是垂直对齐)。我不知道你是否明白。在
this.toolStrip1.items.AddRange()
method.mcnet中更改项目顺序如下:如果不使用默认行为,则必须使用自定义控件。非常感谢。这就是我需要的。这与ToolstripDropDownButton而不是ToolstripDropDownButton的工作方式相同?正如您所看到的,我有一个
ToolstripDropDownButton
。然后我创建了一个带有自定义布局的
ToolStripDropDown
,并将其设置为
ToolStripDropdownButton
DropDown
。哦,对不起,我没有看到您的代码。谢谢Reza。这不是唯一的解决方案,对于需求可以有不同的解决方案,例如通过使用托管一些控件的
ToolStripControlHost
。但这很简单。