65.9K
CodeProject 正在变化。 阅读更多。
Home

改进和重写的 RibbonMenuButton

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (154投票s)

2007 年 5 月 14 日

CPOL

4分钟阅读

viewsIcon

373624

downloadIcon

14850

一个具有多种功能的新版本

Screenshot - presentation.png

引言

首先,感谢大家。我很感激知道人们重视这项努力。我记得就像昨天一样,我十六岁左右,看到了很多类型的软件、应用程序和游戏。对我来说,当时我不可能接触和开发软件。我从那时起学到了很多,而且我意识到现在接触这类软件要容易一百万倍。此外,如果我能帮助任何人创建赏心悦目的应用程序,我决定他们可以自由使用我的代码。

背景

我一直在思考如何制作一个完全可定制的按钮,以及改变 RGB 组件有多么困难。我决定制作 RibbonColor,它有很多操作颜色的选项。如果你玩演示应用程序,当你移动色调、饱和度和亮度滑块时,你会很快明白。我不得不承认,我的新 RibbonControl 库大约有 70% 已经完成。然而,由于人们渴望获得改进的代码,并告诉我我几乎没有解释我的代码,我决定像给初学者一样来写。所以,我们开始吧。

如何使用代码

首先,创建一个新的 Windows 应用程序。从解决方案资源管理器中,选择“添加现有项”选项。然后选择RibbonMenuButton.cs并重新生成项目。现在,如果你去form1设计器,在工具箱中你会看到RibbonMenuButton。将它拖到窗体上。你会看到一个没有意义的控件,但让我们来调整属性。首先,设置RibbonMenuButton的属性。

Screenshot - ribbonmenubuttonprops.png

设置完属性后,添加一张图片,设置你想要的文本,如果你的系统中有,就将字体设置为 Segoe UI。你会看到类似这样的效果。

Screenshot - trialbutton.png

如果你已经编译了项目并且得到了这样的结果,下一步就是更改控件的属性。让我们看看每个属性代表什么。我建议你查看演示项目中的按钮属性设置。

  • Arrow:绘制一个箭头,可以设置为ToRight(向右)或ToDown(向下);这只是绘制,因为双重功能在另一个属性中。
  • Colors:我认为这不需要解释;我建议你使用PlayGround应用程序来选择你的颜色。
  • FadingSpeed:这有助于颜色之间的淡入淡出;选择0以避免淡入淡出。
  • GroupPos:这用于在左、右、中心(无)、顶部或底部创建圆角。
  • ImageLocation:用于将图像放在左侧、右侧、顶部或底部。
  • ImageOffset:用于从边距偏移。
  • MaxImageSize:用于放大按钮,并限制图像缩放。
  • Radius:角的半径。
  • ShowBase:如果你想显示BaseColorBaseStroke颜色,其中Transparent是一种颜色,并且可以实现淡入淡出。如果设置为No,则不进行淡入淡出。
  • SplitButton:创建一个双功能按钮;箭头部分打开关联的ContextMenu,另一部分是主事件。
  • SplitDistance:箭头部分按钮的大小。
  • Title:如果设置的值不等于"",它会自动将标题加粗并放在文本下方。
  • Text:如果你有标题并且想要两行文本,可以在文本中添加\n来实现两行。
  • KeepPress, IsPressed:如果KeepPress在某些按钮上处于活动状态,当其中一个按钮被按下时,它会保持按下状态,而容器中的其他按钮会失去IsPress状态。

我尝试了崩溃应用程序,但它总是有效。所以,我认为代码实际上是无错误的。

关注点

如果你想了解更多关于这些控件的信息,我建议你看看:

  • this.Region:这是避免透明度问题的好方法。
  • LinearGradient 具有多种颜色,使渐变变得容易。
  • MeasureString:这是定位文本的好方法,因为你必须去掉base.OnPaint -> 你必须做所有事情,包括写文本。
  • TransformColors 方法,包括 alpha 透明度。
  • DrawArc 方法:正如你所看到的,通过半径可以制作圆角。
  • OnMouseUp:在这里你可以看到当SplitButton被激活和IsPressed被激活时会发生什么。
  • RibbonColor:我从维基百科和 Gimp 中获取了公式。System.Drawing.Color.GetHueSatBrightness效果不佳。

历史

  • 2007年6月5日。1.6 - 解决了Repaint(重绘)、ChangingSize(改变大小)和过高的 CPU 消耗问题。添加了KeepPress(保持按下)和IsPress(按下状态)功能。
  • 2007年5月16日。1.5 - 因为在我学会如何使用色相、饱和度和亮度时,我不得不重新编写所有内容。
© . All rights reserved.