zoukankan      html  css  js  c++  java
  • 快速开车组合框

    & lt; o> Screenshot - DriveComboBox.jpg 介绍 最近,我需要一些方法来显示计算机上的逻辑驱动器和只有逻辑驱动器。我不认为使用OpenFileDialog或FolderBrowserDialog会有什么问题,但我很快意识到它们并没有完成我想要它们做的事情。 因此,我求助于CodeProject,看看这里是否存在一个可以完成这项工作的控件。我找到了几个(一个“Explorer-Style”的TreeView控件,DriveComboBox, Drive Box),但没有一个能让我满意地解决我的问题,因此我选择了黑我自己的控件。 使用的代码 要使用该控件,请包含代码并将标准组合框添加到窗体/对话框/控件中。接下来,将控件的类型更改为“System.Windows.Forms”。组合框”到“ZinoLib.Windows.Controls.DriveComboBox”。 隐藏,复制Code

    ...
    private ZinoLib.Windows.Controls.DriveComboBox _cbDrives = 
            new ZinoLib.Windows.Controls.DriveComboBox();
    ...

    如果您不想使用设计器将组合框添加到父控件,下面的代码描述了如何创建和添加DriveComboBox到父控件: 隐藏,复制Code

    public class Form1 : System.Windows.Forms.Form
    {
       private ZinoLib.Windows.Controls.DriveComboBox _cbDrives;
    
       ...
    
       private void CreateDriveComboBox()
       {
          _cbDrives = new ZinoLib.Windows.Controls.DriveComboBox();
          _cbDrives.Location = new System.Drawing.Point(8, 24);
          _cbDrives.Name = "_cbDrives";
          _cbDrives.Size = new System.Drawing.Size(320, 21);
          _cbDrives.TabIndex = 0;
          this.Controls.Add(this._cbDrives);
       }
    
       ...
    
    }

    本文中的代码同时支持。net framework 1.1和。net framework 2.0。 的兴趣点 . net框架内置了通过调用System.IO.Directory.GetLogicalDrives()来检索逻辑驱动器字母的支持——但是,它没有提供检索卷名或适当图标的接口。通过浏览MrPJ的“Explorer-Style”TreeView控件的源代码和微软319350,我知道了如何通过使用位于shell32.dll的SHGetFileInfo来检索这些信息。通过解析适当的标志,SHGetFileInfo可以返回显示名称、图标索引、图标句柄等等。然后,我需要一种方法来显示这些信息——并认为扩展Niels Penneman出色的ImageCombo控制很容易。10分钟后,DriveComboBox就完成了,可以使用了。 驱动器信息的检索是在函数“BuildDriveList()”中完成的,该函数最初由DriveComboBox的构造函数调用。在SHGetFileInfo用于检索实际的驱动器信息之前,我们必须说明需要哪些信息。对于DriveComboBox,需要提供以下信息: iconIcon indexDisplay名称 实际的检索非常简单,因为我们只需要遍历system . io . direct . getlogicaldrives()返回的驱动器,并为每个驱动器调用SHGetFileInfo。然后,可以使用检索到的信息构建驱动器图标的ImageList,并将它们添加到组合框中。 隐藏,收缩,复制Code

    public void BuildDriveList()
    {
       base.Items.Clear();
    
       ShellAPI.SHFILEINFO shInfo = new ShellAPI.SHFILEINFO();
       ShellAPI.SHGFI dwAttribs = 
         ShellAPI.SHGFI.SHGFI_ICON |
         ShellAPI.SHGFI.SHGFI_SMALLICON |
         ShellAPI.SHGFI.SHGFI_SYSICONINDEX |
         ShellAPI.SHGFI.SHGFI_DISPLAYNAME;
    
       ListDictionary _iconDict = new ListDictionary();            
       foreach( string drive in System.IO.Directory.GetLogicalDrives() )
       {
          IntPtr m_pHandle = ShellAPI.SHGetFileInfo(drive, 
                                ShellAPI.FILE_ATTRIBUTE_NORMAL,
                                ref shInfo,
                                (uint)System.Runtime.InteropServices.Marshal.SizeOf(shInfo),
                                dwAttribs);
    
          if( m_pHandle.Equals(IntPtr.Zero)==false )                    
          {
             int idxIcon = 0;
             if( _iconDict.Contains(shInfo.iIcon)==false )
             {
                base.ImageList.Images.Add( 
                  System.Drawing.Icon.FromHandle(shInfo.hIcon).Clone() 
                  as System.Drawing.Icon );
    
                User32API.DestroyIcon(shInfo.hIcon);
    
                _iconDict.Add( shInfo.iIcon, _iconDict.Count );
                idxIcon = _iconDict.Count-1;
             }
             else
                idxIcon = Convert.ToInt32( _iconDict[shInfo.iIcon] );
    
    
             ImageComboItem item = 
               new ImageComboItem(shInfo.szDisplayName, idxIcon, false);
             item.ItemValue = drive;
             base.Items.Add( item );
          }
       }
    
       if( base.Items.Count!=0 )
          base.SelectedIndex = 0;
    }

    许可证 你可以自由地以任何你希望的方式使用这段代码-在免费软件和商业程序-免费。如果你能在“关于你的信息”框里放个小链接,那就太好了,但这不是必须的。 确认 大部分的功劳必须归功于Niels Penneman的ImageCombo控件,它在DriveComboBox控件中做了大部分的魔法,MrPJ为他的“Explorer-Style”TreeView控件,这给了我使用SHGetFileInfo的想法。 历史 2007-05-08:最初版本。2007-05-15:将驱动器枚举移动到单独的函数“BuildDriveList”并从设计器中删除Items属性。2007-05-23:对文章文本的小修改。 本文转载于:http://www.diyabc.com/frontweb/news358.html

  • 相关阅读:
    linux基本命令之grep
    Linux在线练习网站
    MySql分表分库思路
    SqlServer触发器
    SqlServer存储过程
    Spring常用注解总结
    SpringMVC的HelloWorld
    XML基础和Web基本概念(JavaWeb片段一)
    红黑树-结点的删除(C语言实现)
    红黑树-结点的插入
  • 原文地址:https://www.cnblogs.com/Dincat/p/13443784.html
Copyright © 2011-2022 走看看