• DOTNETBAR的使用方法


    我这里讨论的版本是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,这个比较有用一点。
    先写这么点,没有涉及到具体应用,希望给第一次用的人不知道是什么了查一下

  • 相关阅读:
    从MANNING抽的新书 免费分享 <算法图解>
    这些天在看的
    创建Spring框架程序初始化的的几种方式
    我在互联网公司的一天
    python文件中 代码的顺序
    分布式事务,两阶段提交协议,三阶段提交协议
    Zookeeper工作原理
    CAP定理
    SpringCloud 架构
    springCloud(一)Erueka工作原理
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/2935884.html
Copyright © 2020-2023  润新知