zoukankan      html  css  js  c++  java
  • DOTNETBAR的使用方法(转)

    这里都是我自从去年开始用dotnetbar这个vs上的美化控件之后的一些使用心得和使用技巧,我现在几乎每次用到这个控件的时候,都会按照下面的技巧,来安排我的这些控件的排列方式啊,style等等,希望给各位一些抛砖引玉的作用,也欢迎大家写出自己的小技巧,让我们的winform程序更加漂亮~~

    几个修改的地方
    1、RIBBONTITLE,一开始要留空,后来用代码修改
    2、把左上角的圆点的功能删除掉
    3、左上角要写成:系统状态:联通中
    4、
    下来要解决一个问题,就是关于DATAGRID,的TITLE,都要让所有的名称都排下,不要换行

    使用RIBBONCONTROL要注意的几个问题:
    1、首先将form的text设置为空
    2、然后将form的controlbox设置为false
    3、然后将form的formborderstyle设置为Sizable
    4、最后一步,在ribboncontrol的标题栏写窗口标题,注意不是text而是RibbonControl1.TitleText = “非煤矿山应急救援指挥系统 – 基本情况数据库”
    5、如果你喜欢,我习惯将FORM的STARTPOSITION设置为CENTERSCREEN

    使用BAR作为STATESBAR的几个小技巧
    1、这个BAR是DOTNETBAR系列里的BAR,而不是其他的:》
    2、要将STYLE设置为OFFICE2007
    3、将ROUNDCORDERS设置为FALSE会好看一点,我试了试,圆角的怎么看都不舒服
    4、将BARTYPE设置为STATUSBAR

    使用GROUPPANEL的小技巧:
    1、把BACKCOLOR设置为透明
    2、将style中的textlinealignment 设置为center(ps:之前是near实在有点难看,太贴近上部了)
    3、内部的label一般使用vs自带的标准label即可,不需要使用ribbon的labelx,我觉得肯定会涉及到painting的问题导致性能下降,而且我觉得

    使用PANELEX
    1、一般要设置padding为1,1,1,1否则,当内部空间维DOCK FILL的时候,会把PANEL的边框挡住,效果不好看
    2、如果PANELEX就在RIBBONCONTROL的里面,一般设置LOCATION为3,0,同时在右侧拖动的时候,拖动到一个恰好位置之后,再把SIZE的宽度加4,这样效果很好

    对TABLE类窗口的修改
    1、去掉原点下的菜单
    2、去掉系统:联通中,右侧的那个QUICKITEM
    3、将DATAGRIDVIEWX的LOCATION调整到3,3,同时,将宽度向右增加2
    4、将每一个PANELX的TEXT都留空

    美化DATAGRIDVIEWX的几点
    1、修改ALTERNATINGROWSDEFAULTCELLSTYLE的BACKCOLOR
    2、修改COLUMNHEADERSHEIGHT

    建立RIBBONCONTROL的几点小细节
    1、建立一个FORM,将form的text设置为空,将controlbox设置为false,将startposition设置为centerscreen;
    2、拖过来一个RIBBONCONTROL,加工一下RIBOONCOTROL,比如是去掉原点下的选项,去掉QUICKITEM等等,然后拖放位置,这时候我一般有两个处理ribboncontrol的方式,一种是利用ribboncontrol作为整个form,那么就将ANCHOR设置为UP DOWN LEFT RIGHT四个侧面;另外一种是利用ribboncontrol左右一个顶部的导航栏,那样的话,就不需要设置anchor了,去掉多余的ribbontabitem2和ribbontamitem1上多余的ribbonbar1,ribbontabitem1字样不用去掉,可以在程序里统一设置它和titletext的内容
    3、托一个BAR过来,几点设置,DOCK为BOTTOM,ROUNDCORNER为FALSE,BARTYPE为STATUSBAR,然后再把ribboncontrol的下边缘向下拖,放在ribbonbar旁边
    4、如果在这里放一个PANELX的时候,有两种情况

    1)只有一个PANELX,情况简单一点,直接DOCK为FILL就好(发现这样不行,PANEL不会随着RIBBONPANEL的变大而同样变大,所以这个方法OVER了)
    解决方法:如果是这样,现在找到了一个方法,把PANELX放在LOCATION=3,0,然后在ribboncontrol的sizechanged方法中
    用这两句变化:
    Me.PanelEx1.Height = Me.RibbonControl1.Height – 60
    Me.PanelEx1.Width = Me.RibbonControl1.Width – 6
    效果比较完美。

    2)如果是左右两个PANELX,情况稍微复杂一点,不过也要注意调整anchor即可
    注意:这里有一个问题,就是如果RIBBONCONTROL是用ANCHOR来对齐下侧位置的话,那么就不能一上来让FORM最大化,那样的话,ANCHOR为BOTTOM的时候,下侧无法对齐
    2009年7月6日
    1.ANCHOR是不可靠的,所以窗体SIZECHANGED之后,要用WIDTH和HEIGHT来限制控件的宽度和高度,做到美观统一!
    2.RIBBONCONTROL DOCK设置为NONE,然后ANCHOR设置为上下左右(或者设置DOCK为TOP,设置好ANCHOR的BOTTOM,不过后来证明,这种方法不行)
    3.小技巧,在任何一个控件上,右键里,都可以快速选择包含本身的上一级控件

    PS:这里顺便写一下c1chart的使用技巧
    1、backcolor设置为透明
    2、一般会把这个放在一个panel里,dock为fill,而panel的dock也为fill,这点有点绕,不过为了美观

    ////

    我这里讨论的版本是DotNetBar 6.7.0.1 for VS2005的破解版本,其他版本我一个是没有时间找到,另外也是因为大同小异

    下载地址,见这里,如果还有哪个朋友下载不了,就加我QQ吧,如果你能提供一个群,我会写在这里,然后利用群空间来整理控件,方便你我

    下载地址是www.vscodes.com/soft/show.asp?id=2879&showasp=1&details.html

    在VS2005中的添加方法与IRISSKIN2类似,不过我这里再说一次:

    先把控件拷到你的程序BIN/Debug下,再到程序里,先引用,然后再工具栏新个一个选项,然后右键选择“选择项”菜单,在这个对话框里点浏览,里把这个DLL重新添加进来,这样,就可以把控件加到先项框里,接下来就是把控件拖到界面上,在代码里加上上面的说明的代码,就可以使用了。有好几十个空间,可以把你的程序装扮成office2007。很COOL!

    这里转几篇使用的日志:

    1—————————————————–

    DotNetBar的SuperTooltip控件使用技巧

                                          

    DotNetBar是一个顶尖的.net第三方表示层空间。作出来的窗口可以说是非常非常非常的cool!SuperTooltip控件主要可以用于实现提示框。在它提供的sample中,实现了树视图中,鼠标移动到树节点上时显示的提示框。

    我的一个项目中用到了树视图,在项目完成以后我决定把它用DotNetBar美化一下。在参考着sample的代码对我的代码进行修改和调试的过程中,我发现sample的代码并不是拿来用就行了的,还是需要理解以后进行修改。

    按照sample的代码,假设我们的Form Form1中有控件TreeView treeView1,那么为treeView1实现提示框的方法如下:(我没用窗口编辑器,只修改代码来着)

    1 在项目的引用中添加DevComponents.DotNetBar。新建一个类NodeSuperTooltipProvider,将sample中的这个类的代码复制过来。注意,如果你的程序里的树节点不是用的.net自带组件TreeNode,而是从TreeNode继承而来的自定义类型,那么将以下所有代码中的TreeNode都改成你自定义的类型,并且很多地方也要加入强制类型转换。

    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;

    namespace SuperTooltip
    {
    /// <summary>
    /// Wrapper so SuperTooltips can be displayed for node objects.
    /// </summary>
    public class NodeSuperTooltipProvider : Component, DevComponents.DotNetBar.ISuperTooltipInfoProvider
    {
       private TreeNode m_Node=null;

       /// <summary>
       /// Creates new instance of the object.
       /// </summary>
       /// <param name="node">Node to provide tooltip information for</param>
       public NodeSuperTooltipProvider(TreeNode node)
       {
        m_Node=node;
       }

       /// <summary>
       /// Call this method to show tooltip for given node.
       /// </summary>
       public void Show()
       {
        if(this.DisplayTooltip!=null)
         DisplayTooltip(this,new EventArgs());
       }

       /// <summary>
       /// Call this method to hide tooltip for given node.
       /// </summary>
       public void Hide()
       {
        if(this.HideTooltip!=null)
         this.HideTooltip(this,new EventArgs());
       }

       #region ISuperTooltipInfoProvider Members

       /// <summary>
       /// Returns screen coordinates of object.
       /// </summary>
       public System.Drawing.Rectangle ComponentRectangle
       {
        get
        {
         Rectangle r=m_Node.Bounds;
         r.Location=m_Node.TreeView.PointToScreen(r.Location);
         return r;
        }
       }

       public event EventHandler DisplayTooltip;
       public event EventHandler HideTooltip;

       #endregion
    }
    }

    2 在Form1种添加控件:

    private DevComponents.DotNetBar.SuperTooltip superTooltip1;
    private System.Windows.Forms.Timer tooltipDisplayDelay;

    一个是SuperTooltip,另一个是.net本身带的Timer,用于控制提示框显示的时间。

    3 Form1中的InitializeComponent()函数中添加:

    this.components = new System.ComponentModel.Container();
    this.superTooltip1 = new DevComponents.DotNetBar.SuperTooltip();
    this.tooltipDisplayDelay = new System.Windows.Forms.Timer(this.components);

    需要初始化components是因为那个Timer初始化的时候要用。不过去掉可以不可以我也没试过……

    //
    // superTooltip1
    //
    this.superTooltip1.DefaultFont = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
    //
    // tooltipDisplayDelay
    //
    this.tooltipDisplayDelay.Interval = 1000;

    4 写一个生成所有节点的提示框的函数:

    private superTooltip_Refresh()
    {
    // Load SuperTooltip information for each node…
    TreeNode node=treeView1.Nodes[0];
    while(node!=null)
    {
       // Creates wrapper to provide SuperTooltip control access to the node object
       NodeSuperTooltipProvider sp=new NodeSuperTooltipProvider(node);
       node.Tag=sp;
       // Assign the wrapper to SuperTooltip control together with information
       // about what to display on Super Tooltip for this node.
       superTooltip1.SetSuperTooltip(sp,new DevComponents.DotNetBar.SuperTooltipInfo([header_text],"",[additional_text],null,null,DevComponents.DotNetBar.eTooltipColor.Lemon));
       // Must expand node to get to the child nodes via NextVisibleNode
       node.Expand();
       node=node.NextVisibleNode;
    }
    }

    其中[header_text]和[additional_text]处添加希望在提示框中显示的string。[header_text]会被加粗。另外,SuperTooltipInfo的最后一个参数用来改变颜色。

    本来这些代码在sample里面是写在Form1的Load事件函数里面的,但是一般来说用到树视图的程序都会对节点进行各种操作,比如添加、删除、修改等等。我设计的提示框中显示的是节点的Text、它子节点的Text和它父节点的Text。开始我按照sample的代码把这些代码写在Form1的Load事件函数中,结果当我删除了一个节点时,它父节点的提示框内容并没有改变。其原因就是以上这段生成每个节点的提示框的代码只在Form1生成的时候才调用Load事件函数,而改变树视图后并不重新生成。所以,我把这些代码单独写在一个函数中,
    并在Form1的Load事件函数中调用它,并且在我对树和节点进行操作以后也会调用它,以刷新所有的提示框。

    5 Form1的Load事件函数,每个添加、修改、删除节点的button、menuItem等对象的Click事件函数的最后加入代码:

    this.superTooltip_Refresh();

    6 定义一个TreeNode私有属性:

    private TreeNode m_LastMouseOverNode = null;

    7 treeView1的MouseMove事件函数:

    TreeNode nodeAt=treeView1.GetNodeAt(e.X,e.Y);
    if(nodeAt!=m_LastMouseOverNode)
    {
       HideNodeTooltip();
       if(nodeAt!=null)
       {
        m_LastMouseOverNode=nodeAt;
        // Delayed display
        tooltipDisplayDelay.Start();
       }
    }

    8 treeView1的MouseDown事件函数:

    // Hide tooltip if any is visible…
    HideNodeTooltip();

    9 treeView1的MouseLeave事件函数:

    // Hide tooltip when mouse leaves tree control
    HideNodeTooltip();
    tooltipDisplayDelay.Stop();

    10 tooltipDisplayDelay的Tick事件函数:

    tooltipDisplayDelay.Stop();
    if(m_LastMouseOverNode!=null)
       ShowNodeTooltip(m_LastMouseOverNode);

    11 ShowNodeTooltip和HideNodeTooltip函数:

    private void ShowNodeTooltip(TreeNode node)
    {
    if(node==null)
       return;
    NodeSuperTooltipProvider sp=node.Tag as NodeSuperTooltipProvider;
    sp.Show();
    m_LastMouseOverNode=node;
    }

    private void HideNodeTooltip()
    {
    if(m_LastMouseOverNode!=null)
    {
       NodeSuperTooltipProvider sp=m_LastMouseOverNode.Tag as NodeSuperTooltipProvider;
       sp.Hide();
       m_LastMouseOverNode=null;
    }
    }

    12 以上6-11步,都是sample代码中原封不动搬来的,但是运行的时候有一个重大问题,就是当我添加一个节点以后,当我的鼠标移动到新节点上时,会出现Null异常。经过调试,我发现异常出现在ShowNodeTooltip和HideNodeTooltip函数中的局部变量sp上。关于sp的初始化的代码如下:

    // ShowNodeTooltip()
    NodeSuperTooltipProvider sp=node.Tag as NodeSuperTooltipProvider;

    // HideNodeTooltip()
    NodeSuperTooltipProvider sp=m_LastMouseOverNode.Tag as NodeSuperTooltipProvider;

    而前面有这样的代码段:
    // Creates wrapper to provide SuperTooltip control access to the node object
    NodeSuperTooltipProvider sp=new NodeSuperTooltipProvider(node);
    node.Tag=sp;

    可以看出,SuperTooltip控件是将NodeSuperTooltipProvider的实例赋给节点的Tag以实现提示框的功能。所以,如果我们没有对新建节点的Tag进行赋值,就会出现Null异常。

    实际上,如果每当添加一个节点时都调用前面的superTooltip_Refresh(),就不存在这样的异常。但是,并不是每个程序都需要有这样一个刷新提示框的函数,也许某些程序提示框中的内容是固定的。

    在这种程序中,修复这个bug的方法有两种:

    第一种,就是如果你的节点是从TreeNode继承而来的自定义类,那么在该类的所有构造函数中都加入如下程序段:

    this.Tag = new NodeSuperTooltipProvider(this);

    第二种,就是如果你的节点用的就是TreeNode组件,那么就要在添加节点的所有button和menuItem等对象的Click事件结尾加入:

    [node_name].Tag = new NodeSuperTooltipProvider([node_name]); // [node_name]是新建节点在函数中的标识符。

    至此,我们的树视图中提示框的功能就实现了。

    2、——————————————————————

    最近在使用dotnetbar,简单写一下使用方法,具体细节有待研究。希望对初次使用的人有用。
    1、Bar就是一个菜单栏,可以右键增加button和combobox等等许多,大家可以一一试试。
    2、bubbleBar是一个工具栏,右键增加button(可以增减tab但是没看出啥效果),然后就可以实现苹果系统的波浪选择效果。
    3、balloonTip,气球。把他拖到任何一个控件上面,当鼠标在上面悬浮时就出现气球。
    4、ContextMenuBar,这是在鼠标右击的时候出来的菜单.
    5、colorPickerButton控件,用来做颜色的选择。
    6、ComboBoxEx,看名字就知道了
    7、ListViewEx和GroupPanel,看名字就知道是什么了。好看了许多
    8、RibbonBar,还是button,office2007风格,可以右键增加。
    9、explorerBar,类似于winxp左边的导航菜单,在vista大行其道的今天,觉得不是十分漂亮了
    10、itemPanel,与expandableSplitter结合可以做导航栏,设置ExpandedControl属性,鼠标过度效果
    11、expandablePanel,可下拉的控件,点击后回缩
    12、maskedTextBoxAdv,textbox,加了个按钮实现清空
    13、tabControl,这个比较有用一点。
    先写这么点,没有涉及到具体应用,希望给第一次用的人不知道是什么了查一下。

  • 相关阅读:
    37. Sudoku Solver(js)
    36. Valid Sudoku(js)
    35. Search Insert Position(js)
    34. Find First and Last Position of Element in Sorted Array(js)
    33. Search in Rotated Sorted Array(js)
    32. Longest Valid Parentheses(js)
    函数的柯里化
    俞敏洪:我和马云就差了8个字
    vue路由传值params和query的区别
    简述vuex的数据传递流程
  • 原文地址:https://www.cnblogs.com/rainbowzc/p/1803886.html
Copyright © 2011-2022 走看看