我可以将一个ComboBox和一个简单的Button嵌入到WinForms的StatusStrip中吗?

Iva*_*van 9 .net c# combobox statusstrip winforms

默认情况下,ComboBox和Button元素不属于WinForms设计器提供的StatusStrip(DropDownButton和SplitButton).有没有办法在那里添加它们?据我所知,任何控制都可以嵌入那里,但如何?

And*_*eli 21

更简单的是,您可以剪切通过ToolStrip中的菜单创建的ToolStripComboBox并将其粘贴到StatusStrip中.没有写代码行...而且它有效;-)


dig*_*All 13

您可以轻松实现继承ToolStripControlHost:

[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.MenuStrip |
                                       ToolStripItemDesignerAvailability.ContextMenuStrip | 
                                       ToolStripItemDesignerAvailability.StatusStrip)]
    public class ComboStripItem : ToolStripControlHost
    {
        private ComboBox combo;

        public ComboStripItem()
            : base(new ComboBox())
        {
            this.combo = this.Control as ComboBox;
        }

        // Add properties, events etc. you want to expose...
    }
Run Code Online (Sandbox Code Playgroud)

重建解决方案后,您甚至可以在设计器中看到该项目:

表单设计器中的ComboStripItem

PS
这个项目也可以在里面ContextMenuStrip和里面使用MenuStrip.

编辑:

要设置自定义图标,请使用ToolboxBitmapAttribute.

但是,我注意到实际上有一个内置的组合框工具条项目ToolStripComboBox.
它没有设计师对StatusStrip的可见性,但它可以通过代码轻松添加到StatusStrip,或者,如果您愿意,可以扩展它以提供完整的可见性:

 [ToolboxBitmapAttribute("image path or use another overload..."),
  ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.MenuStrip |
                                   ToolStripItemDesignerAvailability.ContextMenuStrip |
                                   ToolStripItemDesignerAvailability.StatusStrip)]
 public class ComboBoxItem : ToolStripComboBox
 {
 }
Run Code Online (Sandbox Code Playgroud)