namespace System.Windows.Forms { public class ToolStripDropDownButtonBase : ToolStripDropDownItem { private CustomControls.DropDownButtonBase button; public ToolStripDropDown DropDown { get; set; } public override ToolStripItemCollection DropDownItems => DropDown.Items; public override System.Drawing.Size ImageSize { get => new System.Drawing.Size((int)button.ImageWidth, (int)button.ImageHeight); set { button.ImageWidth = value.Width; button.ImageHeight = value.Height; } } public bool Vertical { get => button.IsVertical; set => button.IsVertical = value; } public bool IsDropDownOpen { get => button.IsDropDownOpen; set => button.IsDropDownOpen = value; } protected void SetButton(CustomControls.DropDownButtonBase button) { this.button = button; SetControl(button); button.VerticalAlignment = VerticalAlignment.Stretch; } protected override void OnFontChanged(EventArgs e) { base.OnFontChanged(e); DropDown.Font = Font; } public override void ApplyStyle(ToolStripProfessionalRenderer r) { button.Foreground = r.Foreground; button.Resources["Button.Static.Background"] = r.ButtonStaticBackground; button.Resources["Button.Static.Border"] = r.ButtonStaticBorder; button.Resources["Button.MouseOver.Background"] = r.ButtonMouseOverBackground; button.Resources["Button.MouseOver.Border"] = r.ButtonMouseOverBorder; button.Resources["Button.Arrow.Background"] = r.ButtonArrowBackground; DropDown.Renderer = r; if (Parent?.Vertical ?? false) button.Margin = new Thickness(0, 0, 0, 3); } internal override void ResetImage() { base.ResetImage(); button.Image = ImageSource; } protected override void UpdateText() { base.UpdateText(); if (button != null) button.Text = DisplayStyle == ToolStripItemDisplayStyle.None || DisplayStyle == ToolStripItemDisplayStyle.Image ? "" : Text; } public ToolStripDropDownButtonBase() { DropDown = new ContextMenuStrip(); DropDown.Opening += (s, e) => OnDropDownOpening(e); DropDown.Opened += (s, e) => { OnDropDownOpened(e); IsDropDownOpen = true; }; DropDown.Closed += (s, e) => { OnDropDownClosed(e); IsDropDownOpen = false; }; (DropDown as ContextMenuStrip).ItemClicked += (s, e) => OnDropDownItemClicked(e); DisplayStyle = ToolStripItemDisplayStyle.ImageAndText; } } }