C#仿QQ皮肤-实现原理系列文章导航
                                                              http://www.cnblogs.com/sufei/archive/2010/03/10/1682847.html

大家还是先来看看效果吧

           

下面我们一起来看看是怎么样实现的


这个其实是控件里是没有的,那天在博客上看到一个同志在写这个控件,所性抄一点思想,在结合我和控件就加上了,还挺好用的,呵呵,有了这个控件大家就不用再为绑定一个表那个字段面苦了,可以一下自全部绑定,实现很简单大家一起来看看吧

第一步我们新建一个组件名称 为ComboBoxDataGridView

其实就是dataGridViewHost  和ToolStripDropDown之间的相互配合

这个控件是继承自我皮肤里的控件Combox这个大家一会儿看代码

我们要声明一个委托来调用 构造DataGridViw的方法

代码

  /// /声明一个委托
         public   delegate   void  ComboBoxDataGridViewScroll( object  sender,  bool  vscroll);
         public   event  ComboBoxDataGridViewScroll OnScroll;
         private   const   int  WM_HSCROLL  =   0x114 ;
         private   const   int  WM_VSCROLL  =   0x115 ;

public  ComboBoxDataGridView()
        {
             this .SetStyle(ControlStyles.OptimizedDoubleBuffer,  true );
            DrawDataGridView();
             this .OnScroll  +=   new  ComboBoxDataGridViewScroll(ComboBoxDataGridView_OnScroll);
        }

我们先来看看 DrawDataGridView();
方法吧

代码

  private   void  DrawDataGridView()
        {
            CRD.WinUI.Editors.DataGridView dataGridView  =   new  CRD.WinUI.Editors.DataGridView();
            dataGridView.RowHeadersVisible  =   false ;
            dataGridView.RowTemplate.Resizable  =  DataGridViewTriState.False;  // 固定行高不允许调节
            dataGridView.ColumnHeadersDefaultCellStyle.Alignment  =  DataGridViewContentAlignment.MiddleCenter;
            dataGridView.BackgroundColor  =  SystemColors.ActiveCaptionText;
            dataGridView.BorderStyle  =  BorderStyle.None;
            dataGridView.ReadOnly  =   true ;
            dataGridView.AllowUserToAddRows  =   false ;
            dataGridView.SelectionMode  =  DataGridViewSelectionMode.FullRowSelect;
            dataGridView.Click  +=   new  EventHandler(dataGridView_Click);

// 设置DataGridView的数据源
            CRD.WinUI.Forms.EntryForm frmDataSource  =   new  CRD.WinUI.Forms.EntryForm();
            frmDataSource.Controls.Add(dataGridView);
            frmDataSource.SuspendLayout();

dataGridViewHost  =   new  ToolStripControlHost(dataGridView);
            dataGridViewHost.AutoSize  =  m_blPopupAutoSize;

dropDown  =   new  ToolStripDropDown();
            dropDown.Width  =   this .Width;
            dropDown.Items.Add(dataGridViewHost);
        }

有关DatagridView和Combox的实现 代码大家请参考我的皮肤系统,呵呵

下面我把代码都放上来各们看看吧也提提建议

代码

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Diagnostics;
using  System.Text;
using  System.Windows.Forms;
using  System.Drawing;

namespace  CRD.WinUI.Misc
{
     public   partial   class  ComboBoxDataGridView : CRD.WinUI.Misc.ComboBox
    {
         //  成员变量
         private   const   int  WM_LBUTTONDOWN  =   0x201 , WM_LBUTTONDBLCLK  =   0x203 ;
        ToolStripControlHost dataGridViewHost;
        ToolStripDropDown dropDown;
         private   string  m_sDefaultColumn;
         private   bool  m_blPopupAutoSize  =   false ;
         private  DataGridViewRow m_dgvRow;
         public   event  EventHandler AfterSelector;
         /**/
         /// /声明一个委托
         public   delegate   void  ComboBoxDataGridViewScroll( object  sender,  bool  vscroll);
         public   event  ComboBoxDataGridViewScroll OnScroll;
         private   const   int  WM_HSCROLL  =   0x114 ;
         private   const   int  WM_VSCROLL  =   0x115 ;

public  ComboBoxDataGridView()
        {
             this .SetStyle(ControlStyles.OptimizedDoubleBuffer,  true );
            DrawDataGridView();
             this .OnScroll  +=   new  ComboBoxDataGridViewScroll(ComboBoxDataGridView_OnScroll);
        }

public   void  ComboBoxDataGridView_OnScroll( object  sender,  bool  vscroll)
        {
             this .dataGridViewHost.Focus();
        }

[Description( " 设置DataGridView属性 " ), Browsable( true ), Category( " N8 " )]
         public  DataGridView DataGridView
        {
             get
            {
                 return  dataGridViewHost.Control  as  DataGridView;
            }
        }
        [Description( " 下拉表格尺寸是否为自动 " ), Browsable( true ), Category( " N8 " )]
         public   bool  PopupGridAutoSize
        {
             set
            {
                m_blPopupAutoSize  =  value;
            }
        }

[Description( " 设置默认值 " ), Browsable( true ), Category( " N8 " )]
         public   string  DefaultColumn
        {
             set
            {
                m_sDefaultColumn  =  value;
            }
             get
            {
                 if  (m_sDefaultColumn  ==   null )
                {
                     return  String.Empty;
                }
                 else
                {
                     return  m_sDefaultColumn;
                }
            }
        }

// 绘制DataGridView以及下拉DataGridView
         private   void  DrawDataGridView()
        {
            CRD.WinUI.Editors.DataGridView dataGridView  =   new  CRD.WinUI.Editors.DataGridView();
            dataGridView.RowHeadersVisible  =   false ;
            dataGridView.RowTemplate.Resizable  =  DataGridViewTriState.False;  // 固定行高不允许调节
            dataGridView.ColumnHeadersDefaultCellStyle.Alignment  =  DataGridViewContentAlignment.MiddleCenter;
            dataGridView.BackgroundColor  =  SystemColors.ActiveCaptionText;
            dataGridView.BorderStyle  =  BorderStyle.None;
            dataGridView.ReadOnly  =   true ;
            dataGridView.AllowUserToAddRows  =   false ;
            dataGridView.SelectionMode  =  DataGridViewSelectionMode.FullRowSelect;
            dataGridView.Click  +=   new  EventHandler(dataGridView_Click);

// 设置DataGridView的数据源
            CRD.WinUI.Forms.EntryForm frmDataSource  =   new  CRD.WinUI.Forms.EntryForm();
            frmDataSource.Controls.Add(dataGridView);
            frmDataSource.SuspendLayout();

dataGridViewHost  =   new  ToolStripControlHost(dataGridView);
            dataGridViewHost.AutoSize  =  m_blPopupAutoSize;

dropDown  =   new  ToolStripDropDown();
            dropDown.Width  =   this .Width;
            dropDown.Items.Add(dataGridViewHost);
        }

public   void  dataGridView_Click( object  sender, EventArgs e)
        {
            PopupGridView(e);
        }

public   string  GetDataProperty( string  sColumn)  //
        {
             string  sValue  =   "" ;
             if  (m_dgvRow  !=   null )
            {
                 if  (DataGridView.Columns.Contains(sColumn))
                {
                    sValue  =  m_dgvRow.Cells[sColumn].Value.ToString();
                }
            }
             return  sValue;
        }
         public   void  dataGridView_DoubleClick( object  sender, EventArgs e)
        {
            PopupGridView(e);
        }

//  PopupGridView

/**/
         ///   <summary>
         ///  弹出下拉表格并触发选择后事件
         ///   </summary>
         ///   <param name="e"></param>
         private   void  PopupGridView(EventArgs e)
        {
             if  (DataGridView.SelectedRows.Count  >   0 )
            {
                m_dgvRow  =  DataGridView.SelectedRows[ 0 ];
                 if  (m_sDefaultColumn  !=  String.Empty)
                {
                     string [] sColumnList  =  m_sDefaultColumn.Split( ' , ' );
                     foreach  ( string  sColumn  in  sColumnList)
                    {
                         if  (DataGridView.Columns.Contains(sColumn))
                        {
                            Items.Clear();
                            Items.Add(m_dgvRow.Cells[sColumn].Value.ToString());
                            SelectedIndex  =   0 ;
                        }
                    }
                }

if  (AfterSelector  !=   null )
                {
                    AfterSelector( this , e);
                }
            }
            dropDown.Close();
        }

private   void  ShowDropDown()
        {

if  (dropDown  !=   null )
            {
                dataGridViewHost.Size  =   new  Size(DropDownWidth  -   2 , DropDownHeight);
                dropDown.Show( this ,  0 ,  this .Height);
            }
        }

// 重写方法

protected   override   void  WndProc( ref  Message m)
        {
             if  (m.Msg  ==  WM_LBUTTONDBLCLK  ||  m.Msg  ==  WM_LBUTTONDOWN  ||  m.Msg  ==   0x114   ||  m.Msg  ==   0x115 )
            {
                ShowDropDown();
                 if  (OnScroll  !=   null )
                {
                    OnScroll( this , m.Msg  ==   0x115 );
                }
                 return ;
            }
             base .WndProc( ref  m);

}

protected   override   void  Dispose( bool  disposing)
        {
             if  (disposing)
            {
                 if  (dropDown  !=   null )
                {
                    dropDown.Dispose();
                    dropDown  =   null ;
                }
            }
             base .Dispose(disposing);
        }
    }
}

欢迎大家转载,如有转载请注明文章来自:   http://sufei.cnblogs.com/

签名:做一番一生引以为豪的事业;在有生之年报答帮过我的人;并有能力帮助需要帮助的人;

QQ:361983679 Email:sufei.1013@163.com  MSN:sufei.1013@163.com


C#仿QQ皮肤-ComboBoxDataGridView相关推荐

  1. C#仿QQ皮肤-实现原理系列文章导航

    请稳步我的博客查阅并下载所有资源以及源代码 http://www.cckan.net                                          写作说明 有不少朋友建议我写一下 ...

  2. C#仿QQ皮肤_写作说明

    写作说明 有不少朋友建议我写一下原理,其实我也很想写一下不过一直没有时间,正好今天有时间来个开题吧!!!  有句名言说的好,用心做事但不埋头,积跬步而至千里.性格决定命运,专注成就人生,细节决定成败. ...

  3. C#仿QQ皮肤-常用用户控件EnterFrom1和窗体EntryForm的实现

    导读部分 ----------------------------------------------------------------------------------------------- ...

  4. C#仿QQ皮肤系列之-引言

    阅读全文:http://www.cckan.net/forum.php?mod=viewthread&tid=200 C#仿QQ皮肤-实现原理系列文章导航                    ...

  5. C#仿QQ皮肤-ContextMenuStrip 控件实现

    原文:http://www.sufeinet.com/thread-2083-1-1.html 导读部分 ----------------------------------------------- ...

  6. C#仿QQ皮肤—更新DataGridView的鼠标跟随效果

    C#仿QQ皮肤-实现原理系列文章导航                                                               http://www.cnblogs. ...

  7. MySkin仿QQ皮肤,零基础拥有漂亮的软件界面

    MySkin仿QQ皮肤,零基础拥有漂亮的软件界面.支持透明效果,阴影边框,任意颜色更换,自定义背景,完美支持原生winform全套控件. QQ2013/2014 皮肤同时也是MySkin默认皮肤,无需 ...

  8. C#仿QQ皮肤----新版皮肤Dll发布啦

    下载:http://www.cckan.net/forum.php?mod=viewthread&tid=77 C#仿QQ皮肤-实现原理系列文章导航                       ...

  9. C#仿QQ皮肤-TextBox 控件实现

    C#仿QQ皮肤-实现原理系列文章导航                                                               http://www.cnblogs. ...

最新文章

  1. windows操作系统的引导过程描述
  2. 实现Map并保持插入顺序的Java类?
  3. 用boolalpha输出true或false的问题
  4. 不想当管理者、甚至连项目经理都也不想当,只想静心写写代码、不做管理
  5. android sdk 更新用的HOSTS
  6. Python Django单表增删改操作
  7. android Comparator的使用
  8. size_t为什么重要
  9. matlab 1stopt,1stOpt或者MATLAB自定义公式曲线拟合 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  10. 八类网线和七类网线的区别_七类网线和六类网线区别有哪些
  11. gatk过滤_快速入门GATK | Public Library of Bioinformatics
  12. 扫雷网站推荐及游戏攻略
  13. Python 入门 第一到第三天
  14. 互联网日报 | 5月18日 星期二 | 中国移动启动A股上市;京东物流启动全球招股;快手发布首款自研手游产品...
  15. 微信h5界面隐藏分享按钮
  16. cocos2d-x3.2中用shader使图片背景透明
  17. Fiddler 抓包工具使用详解
  18. Libra 2.0白皮书中文版全文发布
  19. c++中的pow()函数
  20. 多表查询时,执行速度耗时太多

热门文章

  1. Adobe的网页编辑软件Dreamweaver 2021版本下载与安装教程
  2. 新媒体的本质:大数据
  3. 银行笔试题目汇总——通用素质能力测试(EPI)
  4. js 正则 电话号码
  5. 关于js 拼接字符串带有特殊字符的处理
  6. 七种方案!探讨Redis分布式锁的正确使用姿势
  7. https协议的一些杂谈
  8. 第03章 窗口和消息
  9. 第二课:泛型类、接口
  10. web服务器的构建与配置文件,Web服务器构建与配置.ppt