[转]Easily Add a Ribbon into a WinForms Application

志不强者智不达,言不信者行不果。这篇文章主要讲述[转]Easily Add a Ribbon into a WinForms Application相关的知识,希望能为你提供帮助。
本文转自:https://www.codeproject.com/articles/364272/easily-add-a-ribbon-into-a-winforms-application-cs
Easily add ribbon to WinForm Application for .NET Framework 2.0, 3.5, 4.0 & 4.5

  • Download Ribbon_Release_2018-03-19
  • Download Ribbon (07.Oct.2013)
Style 2007
[转]Easily Add a Ribbon into a WinForms Application

文章图片

Style 2010
[转]Easily Add a Ribbon into a WinForms Application

文章图片

Style 2013
[转]Easily Add a Ribbon into a WinForms Application

文章图片

Content
  • Part 1: Background
  • Part 2: How to Use this Ribbon Control
  • Part 3: Cautious While Using with Visual Studio 2010
  • Part 4: Using this Ribbon with MDI Enabled WinForm  (Update)
  • Part 5: Alternative Ribbon
  • Part 6: How to Make a New Theme, Skin for this Ribbon Programmatically
  • Part 7: Known Issues
  • Article Change Log
Part 1: BackgroundThe ribbon that is going to be used in this article is an open source project created by  Jose Menendez Poo. However, the original author of the ribbon has stopped support of it. A group of fans of this ribbon re-host and continue to develop/enhance and support the ribbon.
The original ribbon creator has posted an article explaining what this ribbon is all about at [A Professional Ribbon You Will Use (Now with orb!)]. However, that article doesn‘t describe how to use it in your project. Therefore, this article will show how to use it.
Old Site:  http://ribbon.codeplex.com  (By original author, but has stopped support)
New Site:  http://officeribbon.codeplex.com  (Re-host by fans of the ribbon)
Part 2: How to Use this Ribbon ControlReminder: Please note that this ribbon does not work on  .NET 3.5 Client Profile  and  .NET 4.0 Client Profile. You have to switch the target framework to  .NET 3.5  or  .NET 4.0. When you first create a project, Visual Studio might initially set the target framework to  Client Profile.
[转]Easily Add a Ribbon into a WinForms Application

文章图片

If the project is using  Client Profile, you might receive this error while you are trying to build the solution:
Hide      Copy Code
Error 3 The type or namespace name ‘Ribbon‘ does not exist in the namespace ‘System.Windows.Forms‘ (are you missing an assembly reference?)

  1. Get  System.Windows.Forms.Ribbon35.dll  from download.
  2. Create a blank WinForms project.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  3. Add Ribbon into Visual Studio Toolbox.Right Click on Toolbox > Add Tab.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    Give the new tab a name "Ribbon".
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    Right Click on the New Tab [Ribbon] > Choose Items...
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    [Browse...] Where are you?  System.Windows.Forms.Ribbon35.dl?
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    There you are... Gotcha... Select it...
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    Only  [Ribbon]  can be dragged into  Form. Others, as the picture below said, they are not needed to exist in toolbox. However, it‘s not going to harm your computer or project if you select all the items belonging to ribbon (by default). It‘s up to you.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    And finally, what you‘re going to do is just...
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    Another Way
    Manually code it behind.
    You can add the ribbon into WinForm too with code behind.
    Add a reference of  System.Windows.Forms.Ribbon35.dll  into your project. Build the solution.
    Open the designer of Main Form. In this example,  Form1.Designer.cs.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    Add these three lines of code:
    Hide      Copy Code
    private System.Windows.Forms.Ribbon ribbon1; ribbon1 = new System.Windows.Forms.Ribbon(); this.Controls.Add(ribbon1);

    into  Form1.Designer.cs:
    Hide      Copy Code
    private void InitializeComponent() { ribbon1 = new System.Windows.Forms.Ribbon(); this.components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Text = "Form1"; this.Controls.Add(ribbon1); } private System.Windows.Forms.Ribbon ribbon1;

    Save and Close  Form1.Designer.cs.
    Double click and open  Form1.cs, and now the  Ribbon  control is added into the main form.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    Let‘s continue...
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  4. Click on the  Ribbon  and click  Add Tab.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  5. Click on the newly added  RibbonTab, then click  Add Panel.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  6. Click on the newly added  RibbonPanel, go to  Properties. You will see a set of available controls that can be added to the  RibbonPanel.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    You might not able to see the extra command links of "Add Button", "Add ButtonList", "Add ItemGroup"... etc. at the Properties Explorer.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

    Right click at the Properties Explorer and tick/check the [Commands].
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  7. Try to add some buttons into the  RibbonPanel.
  8. Click on the  RibbonButton, go to  Properties.
  9. Let‘s try to change the image and the label text of the button.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  10. This is how your ribbon looks like now.
  11. Now, create the click event for the buttons. Click on  RibbonButton, go to  Properties, modify the  Name  of the button.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  12. Click on the  RibbonButton, go to properties > Click on Events > Double Click on event of  Click.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  13. Events created. Hide      Copy Code
    public Form1() { InitializeComponent(); }void cmdNew_Click(object sender, EventArgs e) { MessageBox.Show("Button \"New\" Clicked."); }void cmdSave_Click(object sender, EventArgs e) { MessageBox.Show("Button \"Save\" Clicked."); }

  14. Press F5 to run the application. Done.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  15. You might want to inherit your Main Form into a  RibbonForm  to have extra features. Such as:Note: Inherit the Main Form to  RibbonForm  will have some compatibility problems with some of the  System.Windows.Forms  controls. (especially MDI Client Control)  This problem is solved in released version  10 May 2013.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  16. In the code for  Form1.cs, change inheritance of  Form  from this line: Hide      Copy Code
    public partial class Form1 : Form

    to  RibbonForm:
    Hide      Copy Code
    public partial class Form1 : RibbonForm

Part 3: Caution While Using With Visual Studio 2010... deleted ....
Part 4: Using this Ribbon with an MDI Enabled WinForm
[转]Easily Add a Ribbon into a WinForms Application

文章图片

The following guide will show how to apply this ribbon with an MDI (Multi Document Interface) enabled WinForm.
Note: In previous version of Ribbon, inheritance of RibbonForm is not supported well with MDI Enabled WinForm. This problem is solved in released version of  10 May 2013.
Start
  1. Let‘s design a ribbon winform something like this as example. In the properties window, set  IsMdiContainer  to  True.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  2. Create another simple form that will be loaded into the MDI Container of  MainForm.
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片

  3. At code behind of  Form1, add in the below codes: Hide      Copy Code
    public partial class Form1 : Form { public Form1() { InitializeComponent(); }protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.ControlBox = false; this.WindowState = FormWindowState.Maximized; this.BringToFront(); } }

  4. At code behind of  MainForm, create the click events for  RibbonButton  at  MainForm:Note: In the previous version of Ribbon, inheritance of RibbonForm is not supported well with MDI Enabled WinForm. This problem is solved in released version of 10 May 2013.
    Hide      Copy Code
    public partial class MainForm : RibbonForm { public MainForm() { InitializeComponent(); }private void ribbonButton_Form1_Click(object sender, EventArgs e) { // Load Form1 }private void ribbonButton_Close_Click(object sender, EventArgs e) { // Close All Forms } }

  5. Code for loading  Form1  into MDI: Hide      Copy Code
    private void ribbonButton_Form1_Click(object sender, EventArgs e) { foreach (Form f in this.MdiChildren) { if (f.GetType() == typeof(Form1)) { f.Activate(); return; } } Form form1 = new Form1(); form1.MdiParent = this; form1.Show(); }

  6. Code for closing all opened forms in MDI: Hide      Copy Code
    private void ribbonButton_Close_Click(object sender, EventArgs e) { while (this.ActiveMdiChild != null) { this.ActiveMdiChild.Close(); } }

  7. That‘s it. Enjoy.
Part 5: Alternative RibbonYou may also want to have a look at:
  • Windows Ribbon for WinForms
  • QRibbon - developed by http://www.qiosdevsuite.com/
Part 6: How to Make a New Theme, Skin for this Ribbon ProgrammaticallyDefault Theme
[转]Easily Add a Ribbon into a WinForms Application

文章图片

Example color theme of RibbonProfesionalRendererColorTableBlack.cs (ready made by ribbon author).
[转]Easily Add a Ribbon into a WinForms Application

文章图片

Another custom theme:
【[转]Easily Add a Ribbon into a WinForms Application】
[转]Easily Add a Ribbon into a WinForms Application

文章图片

Note: A Theme Builder is included in the demo app, you can obtain it from the download. You can build a new Theme easily with Theme Builder. In new released Ribbon (13 Jan 2013), Ribbon can write and read a theme file. Read more:  How to Create and Load Theme File.
  1. To make your own color theme, create another  class  and  inherit  RibbonProfesionalRendererColorTable.
  2. Change all the color objects into your desired colors.
  3. Example: (the first five colors have been filled for your reference).In this example, we‘ll name the new theme  MyCoolThemeSkin.
    Hide      Shrink 
    [转]Easily Add a Ribbon into a WinForms Application

    文章图片
          Copy Code
    using System; using System.Collections.Generic; using System.Text; using System.Drawing; namespace System.Windows.Forms { public class MyCoolThemeSkin : RibbonProfesionalRendererColorTable { public MyCoolThemeSkin() { #region FieldsOrbDropDownDarkBorder = Color.Yellow; OrbDropDownLightBorder = Color.FromKnownColor(KnownColor.WindowFrame); OrbDropDownBack = Color.FromName("Red"); OrbDropDownNorthA = FromHex("#C2FF3D"); OrbDropDownNorthB = Color.FromArgb(201, 100, 150); OrbDropDownNorthC = OrbDropDownNorthD = OrbDropDownSouthC = OrbDropDownSouthD = OrbDropDownContentbg = OrbDropDownContentbglight = OrbDropDownSeparatorlight = OrbDropDownSeparatordark = Caption1 = Caption2 = Caption3 = Caption4 = Caption5 = Caption6 = Caption7 = QuickAccessBorderDark = QuickAccessBorderLight = QuickAccessUpper = QuickAccessLower = OrbOptionBorder = OrbOptionBackground = OrbOptionShine = Arrow = ArrowLight = ArrowDisabled = Text = RibbonBackground = TabBorder = TabNorth = TabSouth = TabGlow = TabText = TabActiveText = TabContentNorth = TabContentSouth = TabSelectedGlow = PanelDarkBorder = PanelLightBorder = PanelTextBackground = PanelTextBackgroundSelected = PanelText = PanelBackgroundSelected = PanelOverflowBackground = PanelOverflowBackgroundPressed = PanelOverflowBackgroundSelectedNorth = PanelOverflowBackgroundSelectedSouth = ButtonBgOut = ButtonBgCenter = ButtonBorderOut = ButtonBorderIn = ButtonGlossyNorth = ButtonGlossySouth = ButtonDisabledBgOut = ButtonDisabledBgCenter = ButtonDisabledBorderOut = ButtonDisabledBorderIn = ButtonDisabledGlossyNorth = ButtonDisabledGlossySouth = ButtonSelectedBgOut = ButtonSelectedBgCenter = ButtonSelectedBorderOut = ButtonSelectedBorderIn = ButtonSelectedGlossyNorth = ButtonSelectedGlossySouth = ButtonPressedBgOut = ButtonPressedBgCenter = ButtonPressedBorderOut = ButtonPressedBorderIn = ButtonPressedGlossyNorth = ButtonPressedGlossySouth = ButtonCheckedBgOut = ButtonCheckedBgCenter = ButtonCheckedBorderOut = ButtonCheckedBorderIn = ButtonCheckedGlossyNorth = ButtonCheckedGlossySouth = ItemGroupOuterBorder = ItemGroupInnerBorder = ItemGroupSeparatorLight = ItemGroupSeparatorDark = ItemGroupBgNorth = ItemGroupBgSouth = ItemGroupBgGlossy = ButtonListBorder = ButtonListBg = ButtonListBgSelected = DropDownBg = DropDownImageBg = DropDownImageSeparator = DropDownBorder = DropDownGripNorth = DropDownGripSouth = DropDownGripBorder = DropDownGripDark = DropDownGripLight = SeparatorLight = SeparatorDark = SeparatorBg = SeparatorLine = TextBoxUnselectedBg = TextBoxBorder = #endregion }public Color FromHex(string hex) { if (hex.StartsWith("#")) hex = hex.Substring(1); if (hex.Length != 6) throw new Exception("Color not valid"); return Color.FromArgb( int.Parse(hex.Substring(0, 2), system.Globalization.NumberStyles.HexNumber), int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber)); } } }

  4. Then, in the  Load  event of  MainForm.cs, add this line: Hide      Copy Code
    namespace RibbonDemo { public partial class MainForm : RibbonForm { public MainForm() { InitializeComponent(); ChangeTheme(); }private void ChangeTheme() { Theme.ColorTable = new MyCoolThemeSkin(); ribbon.Refresh(); this.Refresh(); } } }

Part 7: Known IssuesAre resolved.
Article Change Log
  • March 20, 2018 - Too many changes... unable to list out.... go to project site for more information
  LicenseThis article, along with any associated source code and files, is licensed under  The Microsoft Public License (Ms-PL

    推荐阅读