必威体育Betway必威体育官网
当前位置:首页 > IT技术

PropertyGrid一用法心得

时间:2019-07-23 06:13:15来源:IT技术作者:seo实验室小编阅读:76次「手机版」
 

propertygrid

最近在用propertygrid控件程序。被怎么能在该控件上显示带空格的属性名(如:First  Name) .

Google了一下后,找到了答案。

在 Visual Studio 里,有一个很好用的东西,就是属性窗口 (Properties Window),如下图所示。属性窗口列出了一个对象所有可见的属性,你可以浏览和修改属性,非常方便。

如何用 Visual Basic 2005 实现这样一个属性窗口呢?我们可以用 VB 2005 提供一个现成的控件,叫做 PropertyGrid,来实现属性窗口。

PropertyGrid 控件的基本使用

打开 Visual Studio。在文件 (File) 菜单上,单击新建项目 (New Project)。 在新建项目 (New Project) 对话框的模板 (Templates) 窗格中,单击 windows 应用程序 (Windows APPlication)。在名称 (Name) 框中键入 PropGrid,再单击确定 (OK)。

在 Solution Explorer 里选中 Form1.vb,改名为 MainForm.vb。

toolbox 的 All Windows Forms 里选中 PropertyGrid 控件,将其拖到 Form 上。在 Properties 窗口将 PropertyGrid 的 Name 属性改为 pgDemo。

这时候的 PropertyGrid 是空的,PropertyGrid 需要关联一个对象,才会有数据最简单的,MainForm 就是一个对象,我们可以将 MainForm 和 pgDemo 关联起来。

双击 MainForm,到代码编辑画面,使代码如下:

Public Class MainForm
 
    Private Sub MainForm_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) handles MyBase.Load
 
        '设置名为 MainForm 和 pgDemo 宽和高	
        Me.Width = 500
        Me.Height = 500
        pgDemo.Height = 400
        pgDemo.Width = 400
 
        '将 pgDemo 和 MainForm 对象关联
        pgDemo.SelectedObject = Me
    End Sub
End Class

在 MainForm_Load 里的前面几句代码并不重要,主要是设置显示的宽度和高度。最关键的是下面 一句:

pgDemo.SelectedObject = Me

Me 指的就是 MainForm。这句代码的意思是 pgDemo 所关联的对象是 Me。

PropertyGrid 控件关联自定义对象

上面示例中 PropertyGrid 控件关联的对象是 Form,是个系统内置对象。如何将 PropertyGrid 与自定义的对象关联起来呢?

我们修改一下上面的示例。

首先先创建一个自定义对象。在 Solution Explorer 中选中 PropGrid 节点,按鼠标右键选中 Add 命令,然后选择 Class...,然后将 Name 改成 Demo.vb。在 Solution Explorer 里会出现一个 Demo.vb 的节点。点击 Demo.vb 节点,会出现代码编辑窗口,请在代码编辑窗口拷贝如下代码:

Public Class Demo
 
#Region "Private Variables "
    Private bLocked As Boolean = True
    Private dtCreateDate As Date
    Private strFilePath As String
    Private strfolderPath As String
#End Region
 
#Region "Public Properties"
    Public Property Locked() As Boolean
        Get
            Return bLocked
        End Get
        Set(ByVal value As Boolean)
            bLocked = value
        End Set
    End Property
 
    Public Property CreatDate() As Date
        Get
            Return dtCreateDate
        End Get
        Set(ByVal value As Date)
            dtCreateDate = value
        End Set
    End Property
 
    Public Property FilePath() As String
        Get
            Return strFilePath
        End Get
        Set(ByVal value As String)
            strFilePath = value
        End Set
    End Property
 
    Public Property FolderPath() As String
        Get
            Return strFolderPath
        End Get
        Set(ByVal value As String)
            strFolderPath = value
        End Set
    End Property
 
#End Region
 
End Class

然后在 Solution Explorer 里选中 MainForm.vb 节点,点击鼠标右键,选择 View Code 命令显示代码编辑窗口。

修改 MainForm_Load 事件,修改代码如下:

Private Sub MainForm_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Width = 300
    Me.Height = 300
    pgDemo.Height = 200
    pgDemo.Width = 200
 
    Dim oDemo As New Demo
    pgDemo.SelectedObject = oDemo
 
End Sub

选择调试 (Debug) 菜单中的开始调试 (Start Debugging),运行该程序。或者直接按快捷键 F5 运行。你会看到如下画面。

在画面的属性窗口中,显示了 oDemo 对象的属性:CreateDate,FilePath,FolderPath,Locked。

当你鼠标点在 CreateDate 值的区域时,会出现一个下拉健,点击下拉键,你会看到一个日历。因为 oDemo.CreateDate 属性是 Date 类型,所以 PropertyGrid 自动会根据对象属性的数据类型给出一个日历控件。同样,Locked 属性是 Boolean,PropertyGrid 根据该属性的数据类型,给出True 和 False 的选择项。

如何在属性值里显示文件对话框和目录浏览对话框

oDemo 对象还有两个属性,oDemo.FilePath,oDemo.FolderPath,当你输入这两个属性的值时,会考虑到,为保证输入值的正确性,最好有像 Windows 那样的打开文件对话框 (OpenFileDialog) 或者目录浏览对话框 (FolderBrowserDialog),你可以从中选择文件或者目录。

要达到这样的功能,你需要修改一下 Demo.vb。

首先,在 Solution Explorer 中双击My Project,选择 Reference,然后点击 Add... 按钮,在 .Net 里选择 System.Design,然后按 OK 健。

然后,请在

Public Class Demo 

这行代码之前加上一行代码:

Imports System.componentModel

然后在

Public Property FilePath() As String

这行代码之前加上如下一行代码:

<Editor(GetType(System.Windows.Forms.Design.FileNameEditor), _
GetType(System.Drawing.Design.UITypeEditor))> _

选择调试 (Debug) 菜单中的开始调试 (Start Debugging),运行该程序。或者直接按快捷键 F5 运行。

这时候,乍一看画面没有什么两样。但当时你点击属性 FilePath 的值区域,会出现一个省略号按钮,点击该按钮,会出现打开文件对话框 (OpenFileDialog),如下图 。用 OpenFileDialog 选择某个文件,你会看到属性 FilePath 的值区域里会出现该文件的文件路径

然后我们要为 FolderPath 加个目录浏览文件框 (FolderBrowserDialog)。在

Public Property FolderPath() As String

这行代码之前加上

<Editor(GetType(System.Windows.Forms.Design.FolderNameEditor), _
GetType(System.Drawing.Design.UITypeEditor))> _

选择调试 (Debug) 菜单中的开始调试 (Start Debugging),运行该程序。或者直接按快捷键 F5 运行。

点击属性 FolderPath 的值区域,会出现 FolderBrowserDialog,如下图。

设置属性类别、说明、是否可见和缺省值

缺省情况下,PropertyGrid 里面出现的所关联对象的属性,都在 Misc 类别里。如果要自定义类别,你可以用 system.ComponentModel.Category 来做。

还是拿上面的例子来说,比如我们要为属性 FilePath 和属性 FolderPath 定一个类别,名字为 Location。

首先,我们还是需要

Imports System.ComponentModel

这句代码。(这句代码在上面示例中已经加过,我们就不需要再加了。)

然后将属性 FilePath 和属性 FolderPath 的代码修改如下:

   <Category("Location"), _
    Editor(GetType(System.Windows.Forms.Design.FileNameEditor), _
    GetType(System.Drawing.Design.UITypeEditor))> _
    Public Property FilePath() As String
        Get
            Return strFilePath
        End Get
        Set(ByVal value As String)
            strFilePath = value
        End Set
    End Property
 
    <Category("Location"), _
    Editor(GetType(System.Windows.Forms.Design.FolderNameEditor), _
    GetType(System.Drawing.Design.UITypeEditor))> _
    Public Property FolderPath() As String
        Get
            Return strFolderPath
        End Get
        Set(ByVal value As String)
            strFolderPath = value
        End Set
    End Property

你会注意到,两个属性声明中各加了一句代码:

Category("Location")

这表示,这两个属性都属于一个叫 Location 的类别。

选择调试 (Debug) 菜单中的开始调试 (Start Debugging),运行该程序。或者直接按快捷键 F5 运行。

显示画面中,如下图,属性 FilePath 和属性 FolderPath 从原来的 Misc 类别中脱离出来,分在另外一个叫 Location 类别里。

以下的表格中的各种 Attributes,可分别用来设置属性的类别,说明,是否可见和缺省值。

Attributes 说明
Category("CategoryName") or 
CategoryAttribute("CategoryName") 

设置属性的类别。缺省类别是 Misc。

Description("Description") or
DescriptionAttribute("Description") 

设置属性的说明。即ProperyGrid 最下面灰色说明部分。

Browsable(True/False) or 
BrowsableAttribute(True/False) 

设置属性是否可见。缺省值是 True。Browsable(False) 表示属性不可见。

[ReadOnly](True/False) or 
ReadOnlyAttribute(True/False)

设置该属性是否只读。缺省值 False。如果值为 True,该属性值不能修改。

displayName("DisplayName") or
DisplayNameAttribute("DisplayName")

如果不设置 DisplayName,属性的标题就是属性的名称,如果设置 DisplayName,属性的标题显示 DisplayName 指定的值 (可以包含空格,中文)。

DefaultValue("Value") or 
DefaultValueAttribute("Value") 

设置属性缺省值。应和属性初始值一样。

http://www.twocity.cn/html/s_propgrid01.html

相关阅读

深度解析美妆社区:网易美学 &#038; 美妆心得

本篇竞品调研报告以社区型产品为核心,选取两种较为相似的竞品:网易美学&美妆心得,展开分析。1. 调研概述1.1 调研简介随着化妆品消费

SCI科技论文英语翻译的一点个人心得

1.英语学术论文的语言风格特点就( 知人方能论世)为什么我们会读不懂SCI上面的文章呢?第一,由于SCI里面出现的专业词汇一般都是出现在

webApp开发心得

从事单页相关的开发一年有余,期间无比的推崇webapp的网站模式,也整理了很多移动开发的知识点,但是现在回过头来看,webapp究竟是好还是

药店兼职营业员一天的心得

药店兼职营业员一天的心得:周末天气晴朗。刚好碰上电商的双十一活动日。忽然想起爸爸药房的生意是不是也如火如荼,长这么大还从来没

ViewState EnableViewState 禁用与使用心得

每个web控件都有个ViewState值,如果一个页面有太多的web控件而不禁用他们的viewstate值的话,会让页面速度大大降低。那么哪些控件的

分享到:

栏目导航

推荐阅读

热门阅读