// ********************************* // Message from Original Author: // // 2008 Jose Menendez Poo // Please give me credit if you use this code. It's all I ask. // Contact me for more info: menendezpoo@gmail.com // ********************************* // // Original project from http://ribbon.codeplex.com/ // Continue to support and maintain by http://officeribbon.codeplex.com/ using System.ComponentModel; using System.Drawing; namespace System.Windows.Forms { public sealed class RibbonSeparator : RibbonItem { public RibbonSeparator() { DropDownWidth = RibbonSeparatorDropDownWidth.Partial; } public RibbonSeparator(string text) : this() { Text = text; } public override void OnPaint(object sender, RibbonElementPaintEventArgs e) { if ((Owner == null || !DrawBackground) && !Owner.IsDesignMode()) return; Owner.Renderer.OnRenderRibbonItem(new RibbonItemRenderEventArgs( Owner, e.Graphics, e.Clip, this)); if (!string.IsNullOrEmpty(Text)) { Owner.Renderer.OnRenderRibbonItemText(new RibbonTextEventArgs( Owner, e.Graphics, e.Clip, this, Rectangle.FromLTRB( Bounds.Left + Owner.ItemMargin.Left, Bounds.Top + Owner.ItemMargin.Top, Bounds.Right - Owner.ItemMargin.Right, Bounds.Bottom - Owner.ItemMargin.Bottom), Text, FontStyle.Bold)); } } public override void SetBounds(Rectangle bounds) { base.SetBounds(bounds); } public override Size MeasureSize(object sender, RibbonElementMeasureSizeEventArgs e) { if (e.SizeMode == RibbonElementSizeMode.DropDown) { // A horizontal separator on a menu if (string.IsNullOrEmpty(Text)) { SetLastMeasuredSize(new Size(1, 2)); } else { Size sz = e.Graphics.MeasureString(Text, new Font(Owner.Font, FontStyle.Bold)).ToSize(); SetLastMeasuredSize(new Size(sz.Width + Owner.ItemMargin.Horizontal + 1, sz.Height + Owner.ItemMargin.Vertical)); } } else { // A vertical separator on a Panel or the QAT if (OwnerPanel == null) { // A vertical separator on the QAT SetLastMeasuredSize(new Size(7, Owner.QuickAccessToolbar.ContentBounds.Height - Owner.QuickAccessToolbar.Padding.Vertical)); } else { // A vertical separator on a Panel SetLastMeasuredSize(new Size(4, OwnerPanel.ContentBounds.Height - Owner.ItemPadding.Vertical - Owner.ItemMargin.Vertical)); } } return LastMeasuredSize; } /// /// Gets or sets a value indicating if the separator should draw the divider lines /// [DefaultValue(true)] [Category("Appearance")] [Description("Background drawing should be avoided when group contains only TextBoxes and ComboBoxes")] public bool DrawBackground { get; set; } = true; /// /// The width of the Separator bar when displayed on a drop down /// [DefaultValue(0)] [Category("Appearance")] [Description("The width of the Separator bar when displayed on a drop down")] public RibbonSeparatorDropDownWidth DropDownWidth { get; set; } } }