zoukankan      html  css  js  c++  java
  • 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,这个比较有用一点。
    先写这么点,没有涉及到具体应用,希望给第一次用的人不知道是什么了查一下

  • 相关阅读:
    HDU 5273 Dylans loves sequence 暴力递推
    HDU 5285 wyh2000 and pupil 判二分图+贪心
    HDU 5281 Senior's Gun 贪心
    HDU 5651 xiaoxin juju needs help 逆元
    HDU 5646 DZY Loves Partition
    HDU 5366 The mook jong
    HDU 5391Z ball in Tina Town 数论
    HDU 5418 Victor and World 允许多次经过的TSP
    HDU 5642 King's Order dp
    抽屉原理
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/2935884.html
Copyright © 2011-2022 走看看