返回首页

{A}
,阅读指南。{S0}简介
由于在网络上免费的Ribbon控件的缺乏,我决定自己写一个。我分析色带控制的前期工作,包括那些在CodeProject上。不幸的是,大多数存在控制仅仅是坏的尝试。为什么呢? ,一些缺乏很好的渲染,一些缺乏调整大小的功能,一些缺乏几乎所有的东西。当然,发达的色带控制价格。这色带是免费的。
为什么没有WPF的?为主,因为我需要的丝带,将它添加到我现有的WinForms应用。 (短版)在我看来这不是一个quot; noquot; WPF中,仅仅是一个quot;不yetquot。无论如何,你可以装载在WPF中的WinForms控制(见)。有些的设计目标
性能 - 这色带包含一个控制窗口,和它里面的每一个元素是管理作为一个控制范围内的一堆,就像ToolStrip控件。虽然这是很难从色带的内部代码管理,这是一种方法来保持它执行了最好的色带。相信我,下载的演示,运行它,并调整窗口的大小。它精美的执行。
办公室的丝带 - 我读到雅各布尼尔森曾经说,大多数用户喜欢,他们使用的方案活脱脱的Word,Excel或PowerPoint的一致性。这是很明显的的,因为人们每天使用该软件。办公室的色带提供视觉上的一致性是非常重要的,因为那的,人们已经知道什么期望和可用性优势。我试图看到,在功能区的每一个元素的外观和行为完全一样,在办公室的色带。
易于使用的程序员 - 组件的命名是符合大多数命名系统的WinForms,甚至ToolStrip的元素。相似的元素的属性,事件和方法的名称命名,就像在ToolStrip的技术项目。
设计支持 - 我会加入越来越多的设计师的支持,这样你就可以管理从设计师剪彩的100%。给它一个尝试。
我将提供错误的更新和修补程序,因为我发现他们或请让我知道它们。使用功能区
色带位于System.Windows.Forms命名空间中,就像每一个其他控制,我觉得这很烦人使用MyCoolFirm.MyCoolNameSpace.MyCoolSubNameSpace命名控制等等(请不要只为业务对象)。
您可以添加一个已编译的DLL的引用:System.Windows.Forms.Ribbon.dll或者你可以直接复制源文件到一个文件夹在您的项目。目前设计的代码,这样你就可以只复制源文件,它不需要任何额外的资源。手:快速指南
色带组成,主要由三种元素的标签,在标签上(其他开发商称他们组)和面板内的项目小组。

{S2}
{S3}
这些元素代表RibbonTab,RibbonPanel和RibbonItem类型。 RibbonItem是一个抽象类的基本功能,它提供了一个RibbonPanel举办任何项目,或在RibbonDropDown。
您可以从功能区的智能标记添加标签,你可以添加面板的标签,选择标签和调用quot; AddPanelquot;动词属性网格的底部。
功能区上的元素根据色带的可用空间的大小。这是一个关键特征的带状。它试图把所有可能的命​​令,通过调整他们的屏幕,而不是像旧的ToolStrip溢出按钮隐藏。
我把它当作3种尺寸:大型,中型和紧凑。额外的大小是用于面板,因为面板可以折叠,然后他们将通过溢出的大小。{S4}的
注:有没有办法直接影响色带上的元素的范围,规模将始终是确定的色带内的布局引擎。事实上,布局取决于两个因素:可用的水平空间上的色带和对项目的规模模式。
如果没有可用空间,面板上的色带,面板将倒塌。如果所有的面板都倒塌和空间尚不可用,滚动按钮会出现,让用户可以横向滚动面板。
按钮
,只有一种类型的按钮:RibbonButton。它可以设置三种风格:{中六}
RibbonButton添加SmallImage属性,您可以设置按钮,在中等或紧凑模式时显示的图像。虽然它不是功能限制,强烈建议使用Image属性和SmallImage财产为16 × 16 32 × 32像素。结果是出人意料的,大小不同。
注意:使用DropDownItems属性将项目添加到该按钮的下拉。
按钮的外观各不相同,通过,大小模式。ItemGroups
喜欢的字体和段落面板上的按钮RibbonItemGroup组内举办的RibbonButton按钮。{七}
添加到RibbonItemGroup项目将永远是衡量和紧凑的尺寸模式处理。
重要:如果RibbonPanel主机RibbonItemGroup对象,你必须设置RibbonPanel.FlowsTo财产右。这些项目的布局,区别对待,因为作为行组流。列表
列表是由RibbonButtonList代表,并提供了两个集合:按钮和DropDownItems。这是因为该列表可以滚动色带,可以下拉更多的项目。下拉列表支持东南角落上的抓地力的大小。
如果你想上要显示的下拉列表按钮,你将有明确添加这些按钮的另一个列表DropDownItems属性。分离
分离器是由RibbonButtonSeparator代表,并提供了众所周知的分隔功能。在下拉时,分离器实际上可以包含文字。它们包含文字时,他们会呈现不同的。教程入门的丝带,在我的网站已知的错误多重下拉菜单不managednbsp; OKnbsp;倒塌的板绘图鼠标按下时要做的事情上下文选项卡工具提示(OK)的文本框,组合框CheckBox和的NumericUpDown RibbonItemsOrb和Quickaccess工具Vista的clientarea对接通过Alt键的键盘快速访问字体和颜色选择器从右到左方向丝带最小化历史2008年5月8日 - 原帖2008年5月29日 - 更新Enabled属性新增RibbonTextBox - 一个常规文本框,标签和图像添加RibbonComboBox - (RibbonTextBox继承)提供一个下拉新增RibbonColorChooser - 一个按钮,显示了一个彩条。看到属性颜色2009年2月23日 - 更新ORB和ORB与设计师功能菜单添加快速访问工具栏一些错误修正2009年5月1日日 - Updatenbsp;Orb和嵌入非客户区的快速访问弹出菜单固定!支持大量的事件处理程序小的错误修正|何梅嫩德斯"公安条例"

回答

评论会员:游客 时间:2011/12/16
嗨,我呼吁像ribbonform1.Show丝带形式()ribb​​onform1打开,但它不会让我点击什么。我使用NET2.0和WindowsXP的
。virus452
评论会员:游客 时间:2011/12/16
这是我目前的工作很有帮助。太感谢你了。因此,有意义的我
sotailok
评论会员:游客 时间:2011/12/16
我能转变成灰色/黑色的风格,整个主题
?chandan56
评论会员:游客 时间:2011/12/16
我使用这种色带控制..插入窗体上的这种控制后,每当我尝试删除这个带状控制,它显示错误异常未将对象引用设置到对象的实例..请帮我..我已经添加通过添加引用这个DLL
jraju11421
评论会员:好 时间:2011/12/16
Howard_CMI
评论会员:优秀 时间:2011/12/16
igosevski
评论会员:游客 时间:2011/12/16
您好,感谢这个惊人的控制。我有一个问题,使用控制在MDI容器。没错,问题是在MDI子。当我尝试最大限度地发挥整个计划冻结约2秒的儿童。我试图改变目标网络2.0或4.0,但仍然是相同的的。别人的经历?修复?,伊万
shelby67
评论会员:游客 时间:2011/12/16
我知道这是在C#中,但为什么不使用的VisualC2008功能包?包微软已经发布了本文中的演示和2008年的功能之间的差异?(请注意,我很赞成这篇文章中)
hernane137
评论会员:游客 时间:2011/12/16
!多数民众赞成有史以来最好的带状但我是一个小白,并获得该项目debuging这个错误有人能帮助我吗?感谢imgsrc=http://www.orcode.com/upimg/2011_12_16_16_29_07_6.gif]
McBill
评论会员:游客 时间:2011/12/16
我使用VB.net2008。我已经添加的ribbon.dll,添加的按钮,但我的程序运行时,我只看到纯色带没有任何按钮。我需要帮助,请
behnam_jan
评论会员:游客 时间:2011/12/16
!我得到这个错误,有时节省您的表单添加按钮后,关闭该窗体,并再次打开它!我不知道为什么!但它的作品
behnam_jan
评论会员:游客 时间:2011/12/16
嗨,wonderfull色带,我见过,它在WindowsXP中?32位...最好的问候
SI_SHEN_001
评论会员:游客 时间:2011/12/16
我很佩服你,因为这Rebbun控制是太酷了,但为什么不更新Office2010风格一样,它,对不起,我不是在讲英语{S9的}好{BR}
timnboys
评论会员:游客 时间:2011/12/16
色带错误,当我添加了一个参考色带错误消失,因为它使我不能建立我的应用程序。但我不断收到这些错误,当我尝试建立我的应用程序。这样就使得它不可能建立这些错误我的应用程序。错误是:codeprelang=""Error spanclass="code-digit"49/span spanclass="code-string"'/spanspanclass="code-string"RibbonArrowDirection'/spanisnotamemberofspanclass="code-string"'/spanspanclass="code-string"Forms'/span./pre/code{C}codeprelang=""Error spanclass="code-digit"48/span spanclass="code-string"'/spanspanclass="code-string"RibbonPanelFlowDirection'/spanisnotamemberofspanclass="code-string"'/spanspanclass="code-string"Forms'/span./pre/codecodeprelang=""Error spanclass="code-digit"30/span Typespanclass="code-string"'/spanspanclass="code-string"System.Windows.Forms.Ribbon'/spanisnotdefined./pre/code
弗雷德里科巴博萨
评论会员:游客 时间:2011/12/16
没有进一步信息的错误是很难帮助。你有这个项目的引用,你到处使用它?命名空间的名称-"System.Windows.Forms的"-可能是在您的方式(尝试重命名为别的不NET命名空间冲突-做任何事情之前,备份。)
。AtomskiMrav
评论会员:游客 时间:2011/12/16
尝试:-我的项目-编译-高级编译选项-设置"目标框架"NET框架4
。milansolanki
评论会员:游客 时间:2011/12/16
添加此helper方法:公共静态ProcessModuleGetCurrentModule(){//需要的实例句柄模块来创建一个系统范围的挂钩模块[]列表=System.Reflection.Assembly.GetExecutingAssembly()GetModules()System.Diagnostics.Debug.Assert(名单=NULL放大器;放大器;list.LengthGT;0)VARcurrentProcess=Process.GetCurrentProcess() VAR模块=currentProcess.Modules;ProcessModuleMOD=NULL;的foreach(在模块ProcessModule米)//。NET2,我们将在这里找到模块(m.ModuleName==列表[0]){MOD=M 打破;} //。NET4当前模块(MOD==NULL)MOD=Process.GetCurrentProcess()MainModule;返回MOD;}更新GlobalHook.cs-InstallHook()_hHook=WinApi.SetWindowsHookEx(htype,_HookProc,GetCurrentModule(BaseAddress),0。)"
brightak
评论会员:游客 时间:2011/12/16
感谢。我得到了它的工作后,我包括"使用System.Diagnostics;"
han6man
评论会员:游客 时间:2011/12/16
codeprelang="cs"spanclass="code-keyword"using/spanSystem.Diagnostics;/pre/codecodeprelang="cs"spanclass="code-SummaryComment"////spanspanclass="code-comment"spanclass="code-SummaryComment"</spanspanclass="code-SummaryComment"summary/spanspanclass="code-SummaryComment">/span/spanspanclass="code-SummaryComment"////spanspanclass="code-comment"Installstheactualunsafehook/spanspanclass="code-SummaryComment"////spanspanclass="code-comment"spanclass="code-SummaryComment"</spanspanclass="code-SummaryComment"//spanspanclass="code-SummaryComment"summary/spanspanclass="code-SummaryComment">/span/spanspanclass="code-keyword"private/spanspanclass="code-keyword"void/spanInstallHook(){spanclass="code-SummaryComment"////spanspanclass="code-comment"Errorcheck/spanspanclass="code-keyword"if/span(Handle!=spanclass="code-digit"0/span)spanclass="code-keyword"throw/spanspanclass="code-keyword"new/spanException(spanclass="code-string""/spanspanclass="code-string"Hookisalreadyinstalled"/span); spanclass="code-preprocessor"#region/spanhtypespanclass="code-keyword"int/spanhtype=spanclass="code-digit"0/span; spanclass="code-keyword"switch/span(HookType){spanclass="code-keyword"case/spanHookTypes.Mouse:htype=WinApi.WH_MOUSE_LL;spanclass="code-keyword"break/span;spanclass="code-keyword"case/spanHookTypes.Keyboard:htype=WinApi.WH_KEYBOARD_LL;spanclass="code-keyword"break/span;spanclass="code-keyword"default/span:spanclass="code-keyword"throw/spanspanclass="code-keyword"new/spanException(spanclass="code-string""/spanspanclass="code-string"HookTypeisnotsupported"/span);}spanclass="code-preprocessor"#endregion/span spanclass="code-SummaryComment"////spanspanclass="code-comment"Delegatetorecievemessage/span_HookProc=spanclass="code-keyword"new/spanHookProcCallBack(HookProc); spanclass="code-SummaryComment"////spanspanclass="code-comment"Hook/span_hHook=WinApi.SetWindowsHookEx(htype,_HookProc,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[spanclass="code-digit"0/span]),spanclass="code-digit"0/span);_hHook=WinApi.SetWindowsHookEx(htype,_HookProc,GetCurrentModule().BaseAddress,spanclass="code-digit"0/span); spanclass="code-SummaryComment"////spanspanclass="code-comment"Errorcheck/spanspanclass="code-keyword"if/span(Handle==spanclass="code-digit"0/span)spanclass="code-keyword"throw/spanspanclass="code-keyword"new/spanWin32Exception(Marshal.GetLastWin32Error());}/pre/codecodeprelang="cs"spanclass="code-keyword"public/spanspanclass="code-keyword"static/spanProcessModuleGetCurrentModule(){spanclass="code-comment"///spanspanclass="code-comment"needinstancehandletomoduletocreateasystem-widehook/spanModule[]list=System.Reflection.Assembly.GetExecutingAssembly().GetModules();System.Diagnostics.Debug.Assert(list!=spanclass="code-keyword"null/span&&list.Length>spanclass="code-digit"0/span); spanclass="code-keyword"var/spancurrentProcess=Process.GetCurrentProcess();spanclass="code-keyword"var/spanmodules=currentProcess.Modules;ProcessModulemod=spanclass="code-keyword"null/span;spanclass="code-keyword"foreach/span(ProcessModulemspanclass="code-keyword"in/spanmodules)spanclass="code-comment"/*/spanspanclass="code-comment"//for.net2wewillfindmodulehereif(m.ModuleName==list[0].Name){mod=m;break;}*//spanspanclass="code-comment"///spanspanclass="code-comment"for.net4takecurrentmodule/spanspanclass="code-keyword"if/span(mod==spanclass="code-keyword"null/span)mod=Process.GetCurrentProcess().MainModule; spanclass="code-keyword"return/spanmod;}/pre/code在InstallHook()我nead取代codeprelang="cs"_hHook=WinApi.SetWindowsHookEx(htype,_HookProc,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[spanclass="code-digit"0/span]),spanclass="code-digit"0/span);/pre/code??????????{BR}我喜欢这个有关此修补程序codeprelang="cs"spanclass="code-SummaryComment"////spanspanclass="code-comment"Hook/span_hHook=WinApi.SetWindowsHookEx(htype,_HookProc,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[spanclass="code-digit"0/span]),spanclass="code-digit"0/span);spanclass="code-keyword"if/span(_hHook==spanclass="code-digit"0/span)_hHook=WinApi.SetWindowsHookEx(htype,_HookProc,spanclass="code-SDKkeyword"IntPtr/span.Zero,spanclass="code-digit"0/span);spanclass="code-comment"///spanspanclass="code-comment"FIX/span/pre/code日(星期一),9月12日,2011年4:14AM修改"
munnalingam
评论会员:游客 时间:2011/12/16
感谢很多。这工作得很好。imgsrc=http://www.orcode.com/upimg/2011_12_16_16_29_08_10.gif林甘
会员4077583
评论会员:游客 时间:2011/12/16
如何重绘控制才能看到的按钮添加代码。感谢
phanvdam
评论会员:游客 时间:2011/12/16
我要隐藏标题栏和按钮栏ORB,如何做到这一点
?史蒂夫陶纳
评论会员:游客 时间:2011/12/16
你可以用imgsrc=http://www.orcode.com/upimg/2011_12_16_16_29_07_7.gif此
会员7814667 |嗨,

我所遇到的问题与下拉菜单。出于某种原因,当应用程序试图执行一个任务,点击小箭头,打开一个按钮下拉菜单中的所有降下来从此菜单上不会得到清理。

为了再现这个,我建议建立一个分裂的下拉按钮,添加一个菜单项的情侣。然后给一些工作要做,(我用for循环)分裂下拉按钮。现在按一下按钮,并尝试打开下拉菜单中的for循环之前已经停止下降。

我以为这可能有一些做的钩子,但我不知道,肯定会欣赏任何援助。

感谢