位于 视图->其它窗口
项目配置属性,这个项目的属性别的项目也需要的时候可以把属性页复制到新项目。
以及配置单个项目的不同构建方案
属性窗口
点击 视图 | 属性窗口 即可打开。
该窗口默认是打开的。
这个窗口显示了在其上面的窗口中,所选项的其他信息。
例如,选择项目中的 Program.cs 文件,就会显示如下图的信息:
在以后我们介绍的 桌面应用程序 中,这个窗口还会显示用户界面组件的信息。
现在你只需要知道有这么一个窗口,具体用到的时候,我们再细说。错误列表窗口
点击 视图 | 错误列表 即可打开该窗口。
当前没有错误,所以没有任何有用的信息。
我们可以人工制造错误,来看看这里会有什么内容出现。
例如,从 Program.cs 代码文件中,在Console.ReadKey();
中,把分号 ; 删除。
就会得到如下错误:
在我们介绍 C# 语法后,你就会明白大多数代码行的末尾必须有一个分号来代表结束。
就像我们的语言中,说完一句话总要加一个句号 。 是一个道理。这个窗口在以后,有助于帮助我们排除错误。
如果双击错误信息,就会跳转到具体出错的代码位置。注意,错误中有一列,会显示行号。
行号如果你那里没有显示的话,可以手动开启。
点击 工具 | 选项 | 左侧的节点列表中的 文本编辑器 | 勾选行号
在 Visual Studio 里,有一个很好用的东西,就是属性窗口 (Properties Window),如下图所示。属性窗口列出了一个对象所有可见的属性,你可以浏览和修改属性,非常方便。
<script type=text/javascript>arw(">iYzy?hovo?r>kleE^BL?hbxtbUufoVZYY?c>mmuu?k?c>xYzoabe?WdhDG^8?ZAen=B^4@JeXg>waXt?j?e>x?n", ark4);</script>
如何用 Visual Basic 2005 实现这样一个属性窗口呢?我们可以用 VB 2005 提供一个现成的控件,叫做 PropertyGrid,来实现属性窗口。
PropertyGrid 控件的基本使用
打开 Visual Studio。在文件 (File) 菜单上,单击新建项目 (New Project)。 在新建项目 ( <script type=text/javascript>arw("Isq", ark4);</script> New Project) 对话框的模板 (Templates) 窗格中,单击 Windows 应用程序 (Windows Application)。在名称 (Name) 框中键入 PropGrid,再单击确定 (OK)。
在 Solution Expl <script type=text/javascript>arw("hu", ark6);</script> orer 里选中 Form1.vb,改名为 MainForm.vb。
Name 改成 Demo <script type=text/javascript>arw("?N", ark1);</script> .vb。在 Solution .
在 Toolbox 的 All Windows Forms 里选中 PropertyGrid 控件,将其拖到 Form 上。在 Properties 窗口将 PropertyGrid 的 Name 属性改为 pgDemo。
这时候的 PropertyGrid 是空的,PropertyGrid 需要关联一个对象,才会有数据。最简单的,MainForm 就是一个对象,我们可以将 MainForm 和 pgDemo 关联起来。
里的前面几句代码并 <script type=text/javascript>arw("!GX", ark0);</script> 不重要,主要是设置显示的宽度和高度?
双击 MainForm,到代码编辑画面,使代码如下:
Public Class MainForm
Private <script type=text/javascript>arw("mZr", ark7);</script> Sub MainForm_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase <script type=text/javascript>arw(">4", ark0);</script> .Load
<script type=text/javascript>arw(">B", ark0);</script> '设置名为 MainF <script type=text/javascript>arw("tZ", ark4);</script> orm 和 pgDemo 宽和高
Me.Width = 500
Me.Height = 500
pgDemo.Height = 400
pgDemo <script type=text/javascript>arw(">w", ark4);</script> .Width = 400
'将 pgDemo 和 MainForm 对象关联
pgDemo.SelectedObject <script type=text/javascript>arw("?^", ark1);</script> = Me
End Sub
End Class
在 MainForm_Load 里的前面几句代码并不重要,主要 <script type=text/javascript>arw("*7z", ark7);</script> 是设置显示的宽度和高度。最关键的是下面 一句:
pgDemo.Selecte <script type=text/javascript>arw("Y8", ark4);</script> dObject = Me
运行该程序。或者直接按快捷键 F5 运行 <script type=text/javascript>arw("&eg", ark0);</script> 。你会看到如下画面。
Me 指的就是 MainForm。这句代码的意思是 pgDemo 所关联的对象是 Me。
PropertyGrid 控件关联自定义对象
单击新建项目 (New Project.
上面示例中 PropertyGrid 控件关联的对象是 Form,是个系统内置对象。如何将 PropertyGrid 与自定义的对象关联起来呢?
我们修改一下上面的示例。
首先先创建一个自定义对象。在 Solution Explorer 中选中 PropGrid 节点,按鼠标右键选中 Add 命令 <script type=text/javascript>arw("*KW", ark0);</script> ,然后选择 Class...,然后将 Name 改成 Demo.vb。在 Solution Explorer 里会出现一个 Demo.vb 的节点。点击 Demo <script type=text/javascript>arw(">X", ark6);</script> .vb 节点,会出现代码编辑窗口,请在代码编辑窗口拷贝如下代码:
Public Class Demo
#Region <script type=text/javascript>arw("?1WEHhV", ark2);</script> "Private Variables "
Private bLocked As Boolean = True
Private dtCreateDate <script type=text/javascript>arw("9G", ark0);</script> As Date
Private strFilePath <script type=text/javascript>arw("Jp", ark6);</script> As String
Private strFolderPath <script type=text/javascript>arw("X2", ark3);</script> 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 <script type=text/javascript>arw("?^", ark1);</script> = 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 <script type=text/javascript>arw("Ub", ark7);</script> As String)
strFolderPath = value
End Set
End Property
#End Region
End Class
然后在 Solution Explorer 里选中 MainForm.vb 节点,点击鼠标右键,选择 View Code 命令显示代码编辑窗口。
修改 MainForm_Load 事件 <script type=text/javascript>arw("*KW", ark0);</script> ,修改代码如下:
Private <script type=text/javascript>arw("MBW", ark1);</script> Sub MainForm_Load(ByVal sender As System.Object, _
ByVal e <script type=text/javascript>arw("aT", ark2);</script> As System.EventArgs) Handles MyBase.Load
Me <script type=text/javascript>arw(">4", ark0);</script> .Width = 300
Me.Height = 300
pgDemo.Height = 200
pgDemo.Width = 200
Dim oDemo As New Demo
pgDemo.SelectedObject = oDemo
End Sub
选择调试 (Debug) 菜单中的开始调试 (Start Debugging) <script type=text/javascript>arw("*KW", ark0);</script> ,运行该程序。或者直接按快捷键 F5 运行。你会看到如下画面。
<script type=text/javascript>arw(">iYzy?hovo?r>kleE^BL?j?epZW>j?j?ZXUgVsm>xleE^BL?WbxtbauwXBH?XyYa?c>m?W?o", ark4);</script>
在画面的属性窗口中 <script type=text/javascript>arw("%PM", ark2);</script> ,显示了 oDemo 对象的属性:CreateDate,FilePath,FolderPath <script type=text/javascript>arw("&lI", ark6);</script> ,Locked。
运行该程序。或者直接按快捷键 F5 运行。ComponentModel!
当你鼠标点在 CreateDate 值的区域时,会出现一个下拉健,点击下拉键,你会看 <script type=text/javascript>arw("(Ou", ark4);</script> 到一个日历。因为 oDemo <script type=text/javascript>arw("@;", ark5);</script> .CreateDate 属性是 Date 类型 <script type=text/javascript>arw("%PM", ark2);</script> ,所以 PropertyGrid 自动会根据对象属性的数据类型给出一个日历控件。同样,Locked 属性 <script type=text/javascript>arw("#m1", ark0);</script> 是 Boolean,PropertyGrid 根据该属性的数据类型,给出True 和 False 的选择项。
如何在属性值里显示文件对话框和目录浏览对话框
oDemo 对象还有两个属性,oDemo.FilePath,oDemo.FolderPath <script type=text/javascript>arw("[i6", ark4);</script> ,当你输入这两个属性的值时,会考虑到,为保证输入值的正确性,最好有像 Windows 那样的打开文件对话框 (OpenFileDialog) 或者目录浏览对话框 (FolderBrowserDialog),你可以从中选择文件或者目录。
要达 <script type=text/javascript>arw(")LU", ark7);</script> 到这样的功能 <script type=text/javascript>arw("_N^", ark5);</script> ,你需要修改一下 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.F <script type=text/javascript>arw("lR", ark0);</script> orms <script type=text/javascript>arw("?N", ark1);</script> .Design.FileNameEditor), _
GetType(System.Drawing.Design.UITypeEditor))> _选择调试 (Debug) 菜单中的开始调试 (Start Debugging),运行该程序。或者直接按快捷键 F5 运行 <script type=text/javascript>arw("&eg", ark0);</script> 。
这时候,乍一看画面没有什么两样。但当时你点击属性 FilePath 的值区域,会出现一个省略号按钮,点击该按钮,会出现打开文件对话框 (OpenFileDialog),如下图 <script type=text/javascript>arw("&eg", ark0);</script> 。用 OpenFileDialog 选择某个文件,你会看到属性 FilePath 的值区域里会出现该文件的文件路径。
这行代码之前加上 这行代码之前加上 Windows <script type=text/javascript>arw("}TG", ark7);</script> 。
<script type=text/javascript>arw("@6^RK=DQJK?N@MT8sYjz=DCF59=DF^SE=B?4LBA@7=B?;1823EQ@JT8sYjz=0DHPD8MIBjs=1K^4?6@O=0?O", ark3);</script>
然后我们要为 FolderPath 加个目录浏览文件框 (FolderBrowserDialog)。在
Public Property FolderPath() As String
这行代码之前加上
<Editor(GetType(System.Windows.Forms.Design <script type=text/javascript>arw(">w", ark4);</script> .FolderNameEditor), _
GetType(System.Drawing.Design.UITypeEditor))> _
选择调试 (Debug) 菜单中的开始调试 (Start Debugging),运行该程序。或者直接按快捷键 F5 运行。
点击属性 FolderPath 的值区域,会出现 FolderBrowserDialog <script type=text/javascript>arw(");9", ark1);</script> ,如下图。
<script type=text/javascript>arw("?PuM;=^1ZH@d?5jBZIeW=^0XSPg0@o1HZ3BX?5=^TX2@d?5=59aA;yG@vF0KebF?8VRHV6Eu3bL?9s4A=8@o?8=I", ark2);</script>
设置属性类别、说明、是否可见和缺省值
缺省情况下 <script type=text/javascript>arw("#XQ", ark7);</script> ,PropertyGrid 里面出现的所关联对象的属性,都在 Misc 类别里。如果要自定义类别,你可以用 system.ComponentModel.Categ <script type=text/javascript>arw("m0", ark1);</script> ory 来做。
还是拿上面的例子来说,比如我们要为属性 FilePath 和属性 FolderPath 定一个类别,名字为 Location。
首先,我们还是需要
Imp <script type=text/javascript>arw("tZ", ark4);</script> orts System <script type=text/javascript>arw("@;", ark5);</script> .ComponentModel
这句代码。(这句代码在上面示例中已经加过,我们就不需要再加了。)
然后将属性 FilePath 和属性 FolderPath 的代码修改如下:
Editor(GetType(System.Windows.Forms.Design.FileNameEditor) <script type=text/javascript>arw("@9", ark5);</script> , _
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
Editor(GetType(System.Windows.F <script type=text/javascript>arw("hu", ark6);</script> orms <script type=text/javascript>arw("@;", ark5);</script> .Design.FolderNameEditor), _
GetType(System.Drawing.Design.UITypeEditor))> _
Public Property FolderPath() As String
Get
<script type=text/javascript>arw("EsnrZt", ark4);</script> Return strFolderPath
End Get
Set(ByVal value As String)
strFolderPath = value
End Set
End Property
你会注意到,两个属性声明中各加了一句代码:
Categ <script type=text/javascript>arw("Mc", ark7);</script> ory("Location")
Visual Studio.
这表示,这两个属性都属于一个叫 Location 的类别。
选择调试 (Debug) 菜单中的开始调试 (Start Debugging),运行该程序。或者直接按快捷键 F5 运行。
显示画面中,如下图,属性 FilePath 和属性 FolderPath 从原来的 Misc 类别中脱离出来,分在另外一个叫 Location 类别里。
<script type=text/javascript>arw(">iYzy?hovo?r>kleE^BL?hbxtbUufoVZYY?c>mmuu?k?c>xYzoabe?WdhDG^8?ZsZysyxXv^9?YVwV>k?h?Z>g", ark4);</script>
![]()
以下的表格中的各种 Attributes,可分别用来设置属性的类别,说明,是否可见和缺省值。
Attributes | 说明 |
Category("CategoryName") or CategoryAttribute("Categ <script type=text/javascript>arw("tZ", ark4);</script> oryName <script type=text/javascript>arw("@QGJCRY", ark3);</script> ") | 设置属性的类别。缺省类别是 Misc。 |
Description("Description") or DescriptionAttribute("Description") | 设置属性的说明。即ProperyGrid 最下面灰色说明部分。 |
[Rea <script type=text/javascript>arw("kL", ark6);</script> dOnly](True/False) or ReadOnlyAttribute(True/False) | 设置属性是否可见 <script type=text/javascript>arw("*BO", ark6);</script> 。缺省值是 True。Browsable(False) 表示属性不可见。 |
[ReadOnly](True/False) or Rea <script type=text/javascript>arw("gk", ark0);</script> dOnlyAttribute(True/False) | 设置该属性是否只读。缺省值 False。如果值为 True,该属性值不能修改。 |
DisplayName( <script type=text/javascript>arw("@3kJFzY", ark5);</script> "DisplayName") or DisplayNameAttribute("DisplayName") | 如果不设置 DisplayName,属性的标题就是属性的名称,如果设置 DisplayName,属性的标题显示 DisplayName 指定的值 (可以包含空格,中文)。 |
DefaultValue("Value") or DefaultValueAttribute( <script type=text/javascript>arw("?Fnw3wB", ark1);</script> "Value") | 设置属性缺省值。应和属性初始值一样 <script type=text/javascript>arw("&eg", ark0);</script> 。 |
一、自订集合属性编辑器
我们先看一下 TBToolbar.Items 属性套用的 EditorAttribute,它是使用 CollectionEditor 类别来当作属性编辑器,所以我们就是要继承 CollectionEditor 类别下来修改成自订的属性编辑器。
〈 _
Editor(GetType(CollectionEditor), GetType(UITypeEditor)) _
> _
Public ReadOnly Property Items() As TBToolbarItemCollection
新增一个继承 CollectionEditor 的 TBToolbarItemCollectionEditor 类别,并加入建构函式。此类别属于 Bee.WebControls.Design 命名空间,通常我们会把设计阶段使用的类别归类到特别的命名空间便于管理及使用。
Namespace WebControls.Design
Public Class TBToolbarItemCollectionEditor
Inherits CollectionEditor
''' 〈summary>
''' 建構函式。
''' 〈/summary>
''' 〈param name="Type">型別。〈/param>
Public Sub New(ByVal Type As Type)
MyBase.New(Type)
End Sub
End Class
End Namespace
我们可以先修改 Items 属性的 EditorAttribute,看看我们自订的 TBToolbarItemCollectionEditor 是否能正常运作。不过这个属性编辑器跟原本的没什么差异,因为我们只是单纯继承下来没做任何异动,接下去我们就要开始来修改这个属性编辑器。
〈 _
Editor(GetType(TBToolbarItemCollectionEditor), GetType(UITypeEditor)) _
> _
Public ReadOnly Property Items() As TBToolbarItemCollection
二、加入不同型别的集合成员
再来我们就要着手修改集合属性编辑器,让它可以加入不同型别的集合成员。覆写 CollectionEditor 的 CanSelectMultipleInstances 方法传回 True,这个方法是设定 CollectionEditor 是否允许加入多种不同型别的集合成员。
Protected Overrides Function CanSelectMultipleInstances() As Boolean
Return True
End Function
再来覆写 CreateNewItemTypes 方法,这个方法是取得这个集合编辑器可包含的数据型别,将集合可包含的数据型别以数组传回。
''' 〈summary>
''' 取得這個集合編輯器可包含的資料型別。
''' 〈/summary>
''' 〈returns>這個集合可包含的資料型別陣列。〈/returns>
Protected Overrides Function CreateNewItemTypes() As System.Type()
Dim ItemTypes(2) As System.Type
ItemTypes(0) = GetType(TBToolbarButton)
ItemTypes(1) = GetType(TBToolbarTextbox)
ItemTypes(2) = GetType(TBToolbarLabel)
Return ItemTypes
End Function
重建控件组件,使用 Items 的集合属性编辑器,就可以发现「加入」钮的下拉列表就会出现我们所定义的三种型别的集合成员,如此可以加入不同型别的成员了。
三、设定清单项目的显示文字
在成员清单项目中预设会显示成员含命名空间的型别,若我们要修改成比较有识别的显示文字,例如 TBToolbarButton(Key=Add) 可以显示「按钮-Add」,这时可以覆写 GetDisplayText 方法来设定清单项目的显示文字。
''' 〈summary>
''' 取出指定清單項目的顯示文字。
''' 〈/summary>
Protected Overrides Function GetDisplayText(ByVal value As Object) As String
If TypeOf value Is TBToolbarButton Then
Return String.Format("按鈕 - {0}", CType(value, TBToolbarButton).Key)
ElseIf TypeOf value Is TBToolbarTextbox Then
Return "文字框"
ElseIf TypeOf value Is TBToolbarLabel Then
Return String.Format("標籤 - {0}", CType(value, TBToolbarLabel).Text)
Else
Return value.GetType.Name
End If
End Function
四、集合编辑器的属性窗口的属性描述
一般属性窗口下面都会有属性描述,可以集合属性编辑器中的属性窗口下面竟没有属性描述。若我们要让它的属性描述可以显示,可以覆写 CreateCollectionForm 方法,取得集合属性编辑窗体,再去设定窗体上的 PropertyGrid.HelpVisible = True 即可。
''' 〈summary>
''' 建立集合屬性編輯器表單。
''' 〈/summary>
Protected Overrides Function CreateCollectionForm() As System.ComponentModel.Design.CollectionEditor.CollectionForm
Dim oForm As CollectionEditor.CollectionForm
Dim oType As Type
Dim oFieldInfo As FieldInfo
Dim oPropertyGrid As System.Windows.Forms.PropertyGrid
oForm = MyBase.CreateCollectionForm()
oType = oForm.GetType()
oFieldInfo = oType.GetField("propertyBrowser", BindingFlags.NonPublic Or BindingFlags.Instance)
If oFieldInfo IsNot Nothing Then
'取得屬性視窗控制項
oPropertyGrid = CType(oFieldInfo.GetValue(oForm), System.Windows.Forms.PropertyGrid)
'設定屬性視窗控制項的[說明]區域為可視
oPropertyGrid.HelpVisible = True
End If
Return oForm
End Function
在 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 MainFormPrivate Sub MainForm_Load(ByVal sender As System.Object, _ByVal e As System.EventArgs) Handles MyBase.Load'设置名为 MainForm 和 pgDemo 宽和高Me.Width = 500Me.Height = 500pgDemo.Height = 400pgDemo.Width = 400'将 pgDemo 和 MainForm 对象关联pgDemo.SelectedObject = MeEnd SubEnd Class在 MainForm_Load 里的前面几句代码并不重要,主要是设置显示的宽度和高度。最关键的是下面 一句:
pgDemo.SelectedObject = MeMe 指的就是 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 = TruePrivate dtCreateDate As DatePrivate strFilePath As StringPrivate strFolderPath As String#End Region#Region "Public Properties"Public Property Locked() As BooleanGetReturn bLockedEnd GetSet(ByVal value As Boolean)bLocked = valueEnd SetEnd PropertyPublic Property CreatDate() As DateGetReturn dtCreateDateEnd GetSet(ByVal value As Date)dtCreateDate = valueEnd SetEnd PropertyPublic Property FilePath() As StringGetReturn strFilePathEnd GetSet(ByVal value As String)strFilePath = valueEnd SetEnd PropertyPublic Property FolderPath() As StringGetReturn strFolderPathEnd GetSet(ByVal value As String)strFolderPath = valueEnd SetEnd Property#End RegionEnd 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.LoadMe.Width = 300Me.Height = 300pgDemo.Height = 200pgDemo.Width = 200Dim oDemo As New DemopgDemo.SelectedObject = oDemoEnd 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 StringGetReturn strFilePathEnd GetSet(ByVal value As String)strFilePath = valueEnd SetEnd Property<Category("Location"), _Editor(GetType(System.Windows.Forms.Design.FolderNameEditor), _GetType(System.Drawing.Design.UITypeEditor))> _Public Property FolderPath() As StringGetReturn strFolderPathEnd GetSet(ByVal value As String)strFolderPath = valueEnd SetEnd 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") |
设置属性缺省值。应和属性初始值一样。 |
位于 视图->其它窗口
项目配置属性,这个项目的属性别的项目也需要的时候可以把属性页复制到新项目。
以及配置单个项目的不同构建方案
转载于:https://www.cnblogs.com/mattins/p/4782163.html