如何创建一个简单的(用户控制)DLL

首先 CodeProject适用于所有级别的程序员。本文仅针对初学者和从未构建过DLL的VB程序员。关于更复杂的组合框,请参阅我的第一篇文章:ExCB - Extended Multi Column组合框 介绍 可下载的文件包含完整的项目,但我将展示创建这个控件的基本步骤,一个可以永久显示一列或多列的组合框(比如“field boxes”,不管有没有标签)和一个用于“record”选择的列表。 DLL通常是一个控件,由其他System.Windows组成。由用户为特定目的创建的表单控件,通常是灵活的、可参数化的,并可随时执行多个任务。 与其他控件一样,UserControl也有自己的属性、方法和事件,其中一些是我们创建的。 在开发DLL时,最好使用另一个简单的WinForms项目来测试控件,这两个项目都在解决方案中,这样我们就可以深入测试和调试控件的行为。 构建用户控件 打开Visual Studio,开始一个新项目,选择类库和给它的名字MCCB,将项目名称的程序集名称和根名称空间,但和给你一个VB公共类class1菜单项目,选择添加用户控制和给它的名字MCCB,这将是未来你的控制- VS创建另一个类的名称和显示了模板- 150 x150广场,更像是一个面板比像一种形式… 在本例中,目标是创建一个使用标签永久公开一列或多列的组合框。我们创建第一列,所有其他列将在运行时创建。我们还需要一个下拉列表和一个打开列表的按钮。 将控件的大小调整为appx。200x200,并改变其背景色为任何其他(轻微)。在运行时,这个颜色将被改变为颜色。控件,但在设计时,在调整控件大小时,我们需要一个可视化引用。让我们从标签(标题/标题)开始:从工具箱中选择一个标签。更改以下属性:Name="Hdr0", AutoSize=False, BackColor=WhiteSmoke, BorderStyle=FixedSingle, Location=0;0, Size=100;19, Text="Hdr0", TextAlign= middleleft现在框显示字段值。代替文本框,我们将使用标签…是一个较轻的控件,而且不写入或更改值。选择另一个标签并改变以下属性:Name="Box0", AutoSize=False, BackColor=White, BorderStyle=FixedSingle, ForeColor=Navy, Location=0;18, Size=100;20, Text="Box0", TextAlign= middleleft接下来,列表。选择一个列表视图并改变属性:Name="MyLV", View=Details, BorderStyle=FixedSingle, FullRowSelect=True, GridLines=True, HeaderStyle=None, Location=0;37, MultiSelect=False, Size=119;138。它的列表有8行,没有头…我们还将创建第一列:添加一列并更改属性:Name="lvCol0", Text="", Width=97。为什么是97年?为了完美地对齐,ListView列的宽度必须是对应标签/框的宽度减1,除了第一列,它必须是减3…最后是按钮,它必须显示任何类型的“向下箭头”。它可以是一个按钮、一个图片框,甚至是一个简单的标签。我们用标签来做。选择一个标签并改变属性:Name="LblDrop", AutoSize=False, BackColor=WhiteSmoke, BorderStyle=FixedSingle, Location=99;18, Size=20;20, Text=""。在属性图像-本地资源-导入:DArrow。png,位于文件夹。\图像 一切都很好,对齐了,对吧?但是,当控件要放在表单上时,列表必须隐藏……因此,为了防止在设计时垂直调整大小,因为头部+框的实际高度是38,添加这第一个代码,在UserControl的调整大小事件: 隐藏,复制Code

Private Sub MCCB_Resize(sender As Object, e As EventArgs) Handles Me.Resize
	Me.Height = 38
End Sub

现在是创建测试和调试控件的项目的时候了。保存项目并启动Windows Forms应用程序类型的新项目,将其命名为MCCB_Test - VS将提供一个表单模板(Form1)。保存第二个项目。添加UserControl项目:菜单文件-添加现有项目-浏览MCCB项目并打开MCCB。vbproj—创建一个解决方案‘MCCB_Test’,这两个项目都在解决方案资源管理器中。选择MCCB项目,菜单BUILD - BUILD MCCB。打开工具箱,看看顶部…控制MCCB已经在那里了。双击它—该控件被放置在表单中,名称为Mccb1。调整大小——如你所见,只允许水平调整大小。开始解决方案——很好,控制就在那里!!现在您可以管理这两个项目。插入一段代码,菜单构建—重新构建MCCB,如果需要检查或更改Form1中的控制属性,如果需要,为调试porposes定义断点,然后开始解决方案。一件容易的事。 我们要创建一组属性。通常,属性必须是公共的,并指定其数据类型。可以查看和更改自定义属性值,就像IDE Properties窗口中的任何其他属性一样,也可以在运行时查看和更改。所有的性质,除了一个,都可能是b在IDE属性窗口中读取和修改。它们中的一些会改变控件的外观:标题和框的高度,边框样式,标题的前景色和背景色,框和列表。这些属性意味着要重新绘制控件,稍后我们将看到。它们有自己定义的数据类型——整数、字节、颜色、BorderStyle——这些可以通过预定义的对话框、组合框或文本框来更改。但是,尽管属性ListFontStyle和LayerOrder处理字节值,而不是简单的输入数字的文本框,但我们更喜欢使用具有描述性文本的组合框来表示允许的值。为此,我们必须声明枚举列表的数据类型。最后,属性SelectedIndex只能在运行时使用。,必须是不可浏览和隐藏的。点击这里查看所有属性 选择并打开MCCB.vb Code选项卡。允许进口的引用,需要指定一些属性的属性,如类别,描述,可浏览或DesignerSerializationVisibility,并宣布两个Enum类型和两个变量——一些属性值(变量的_Name属性的名称,之前一个下划线),一些供内部使用: 隐藏,复制Code

Imports System.ComponentModel   ' For PropertyAttributes

公开课MCCB 隐藏,复制Code

 Public Enum LFStyle         ' for Property ListFontStyle
      SameAsControl = 0
      AlwaysRegular = 1
End Enum

隐藏,复制Code

 Public Enum LayOrder        ' for Property LayerOrder
     Normal = 0
     BringToFront = 1
     SendToBack = 2
End Enum

隐藏,收缩,复制Code

' Property variables
Private _MaxItemsDisp As Integer = 8
Private _HeaderHeight As Byte = 19
Private _HeaderBackColor As Color = Color.WhiteSmoke
Private _HeaderForeColor As Color = Color.Black
Private _HeaderBorderStyle As BorderStyle = Windows.Forms.BorderStyle.FixedSingle
Private _BoxHeight As Byte = 20
Private _BoxBackColor As Color = Color.White
Private _BoxForeColor As Color = Color.MediumBlue
Private _BoxBorderStyle As BorderStyle = Windows.Forms.BorderStyle.FixedSingle
Private _ListBackColor As Color = Color.White
Private _ListForeColor As Color = Color.Black
Private _ListBorderStyle As BorderStyle = Windows.Forms.BorderStyle.FixedSingle
Private _ListFontStyle As Byte = 0      ' 0-SameAsControl, 1-AlwaysRegular
Private _LayerOrder As Byte = 0         ' 0-Normal, 1-BringToFront, 2-SendToBack
Private _SelectedIndex As Integer = -1
' Internal variables
Private _ColumnCount As Integer = 0
Private _ColumnIndex As Integer = 0
Private _TotalWidth As Integer = 99
Private _LeftLocation As Integer = 0
Private _ItemsCount As Integer = 0
Private _Me_MinHeight As Integer = _HeaderHeight + _BoxHeight - 1
Private _ListHeight As Integer = 0
Private _ShowList As Boolean = False    ' used in Resize event
Private _FNIlastIdx As Integer = -1     ' Last ColumnIndex searched
Private _FNIlastStr As String = ""      ' Last String searched
Private _FNI_iFrom As Integer = -1
Private _Error As String = "Error"

如前所述,大多数属性都意味着要重新绘制控件。而重绘控件则意味着要引发的“调整大小”事件。每当列表被下拉或隐藏时,也将调用Resize事件。,当“按钮”LblDrop被单击时。因此,Resize事件必须处理两种不同的情况:1)列表将被下拉(如果有项目要显示),具有正确的高度;2)列表将被隐藏。为了控制它的行为,我们创建了一个变量_ShowList,它的初始值为False,从而确保在设计模式中正确缩放。让我们改变UserControl的Resize事件。注意,_Me_MinHeight = _HeaderHeight + _BoxHeight - 1,所以_Me_MinHeight总是表示控件的(最小)高度,不包含列表,列表的高度是要显示的行数,每个行17像素[16(行高)+ 1(分隔行)]+ 1(最后一行): 隐藏,复制Code

Private Sub MCCB_Resize(sender As Object, e As EventArgs) Handles Me.Resize
    'Me.Height = 38     ' Replaced by the code below:
    If _ShowList And _ItemsCount > 0 Then
        _ListHeight = Math.Min(_ItemsCount, _MaxItemsDisp) * 17 + 1
    Else
        _ListHeight = 0
    End If
    Me.Height = _Me_MinHeight + _ListHeight
    MyLV.Height = _ListHeight
End Sub

Resize事件也将从其他一些情况调用,但是变量_ShowList必须设置为所需的值。那么,让我们创建一个唯一的子程序来设置变量的值并调用Resize事件,它将在以下每种情况下被调用: 隐藏,复制Code

Private Sub ShowHideList(Show As Boolean)
    _ShowList = Show
    MCCB_Resize(Nothing, Nothing)
End Sub

现在,当标签LblDrop被单击时,让我们提供一种机制来下拉或隐藏列表。而且,当鼠标经过标签时,它的背景色变成橙色,光标变为手型。那么,让我们使用鼠标悬停,鼠标离开,然后点击: 隐藏,复制Code

Private Sub LblDrop_MouseHover(sender As Object, e As EventArgs) Handles LblDrop.MouseHover
    Me.Cursor = Cursors.Hand
    sender.BackColor = Color.Orange
End Sub

隐藏,复制Code

Private Sub LblDrop_MouseLeave(sender As Object, e As EventArgs) Handles LblDrop.MouseLeave
    Me.Cursor = Cursors.Default
    sender.BackColor = Color.WhiteSmoke
End Sub

隐藏,复制Code

Private Sub LblDrop_Click(sender As Object, e As EventArgs) Handles LblDrop.Click
    ShowHideList(Show:=(Me.Height <= _Me_MinHeight))
End Sub

现在创建第一个属性。默认情况下,属性是可读的(Get部分)和可写的(Set路径)。但是,也可以将它们声明为只读(仅获取部分)或只读(仅设置部分)。此外,还可以指定一些属性。在本例中,包括类别(现有的或新的,属性将被包括在其中)和描述(出现在属性窗口底部的解释)。若要读取属性,请返回相关变量的值。要编写属性,请将它的关联变量设置为指定的值,如果该值要立即生效,请编写操作代码。在本例中,只需调用子ShowHideList,参数为True,以设置变量_ShowList并下拉列表: 隐藏,复制Code

<Category("_MCCB specifics")> _
<Description("Maximum Items Displyed by the List")> _
    Public Property MaxItemsDisp() As Byte
        Get
            ' Get - if the Property is readable (or ReadOnly)
            Return _MaxItemsDisp
        End Get
        Set(ByVal value As Byte)
            ' Set - if the Property is writable (or WriteOnly)
            _MaxItemsDisp = value
            ShowHideList(True) ' Action
        End Set
    End Property

现在,让我们创建第一个方法,它将允许添加列和设置一些(固定)属性。要从外部访问,该方法必须是公共的。对该方法的第一次调用不会创建新列,而是更改已经存在的列。该方法将接受三个参数: 宽度——要求。列的宽度,以像素为单位。值为0将创建一个隐藏列。文本——要求。列的标题(标题)。对齐,可选的。列的水平对齐。保留默认值(如果未指定)。HorizontalAlignment值(0=左,1=右,2=中心)被用来定义列表视图列的TextAlign属性(或者,例如,文本框)。但是,标签使用了其他值(内容对齐),除了水平位置之外,还反映了垂直位置(顶部、中间、底部)。我们的' header '和'Boxes'是'middle'对齐的,所以HorizontalAlignment值(0,1和2)必须转换为'middle' ContentAlignment值(分别为16,64和32)。 隐藏,收缩,复制Code

Public Sub AddColumn(Width As Integer, Text As String, _
                     Optional Align As HorizontalAlignment = 0)
    Dim Lbl_Align As ContentAlignment = If(Align = 1, 64, _
                                           If(Align = 2, 32, 16))
    Dim Hdr As Label
    Dim Box As Label
    Me.SuspendLayout()
    _ColumnCount += 1
    _ColumnIndex = _ColumnCount - 1
    If _ColumnCount = 1 Then   ' First Column, already exists
        Hdr = Hdr0                          ' Existing Header
        Box = Box0                          ' Existing Box
        MyLV.Width = Width + 19             ' Existing List. Initial
        ' value, including the "Button" (LblDrop)
        lvCol0.Width = Width - 3            ' Existing ListView Column
        _TotalWidth = Width - 1             ' Initial value
        Me.BackColor = Color.Transparent
    Else                        ' Column is to be created
        Hdr = New Label                         ' New Header
        Hdr.Name = "Hdr" & _ColumnIndex.ToString
        Hdr.Left = _TotalWidth
        Box = New Label                         ' New Box
        Box.Name = "Box" & _ColumnIndex.ToString
        Box.Left = _TotalWidth
        MyLV.Columns.Add(New ColumnHeader)      ' New ListView Column
        MyLV.Columns(_ColumnIndex).Name = "lvCol" & _ColumnIndex.ToString
        MyLV.Columns(_ColumnIndex).Text = ""
        MyLV.Columns(_ColumnIndex).Width = Math.Max(Width - 1, 0)
        MyLV.Columns(_ColumnIndex).TextAlign = Align
        MyLV.Width += Width - 1     ' Accum.
        _TotalWidth += Width - 1    ' Accum.
    End If
    Hdr.Width = Width           ' Header
    Hdr.Text = Text
    Hdr.TextAlign = Lbl_Align
    Box.Width = Width           ' Box
    Box.Text = ""
    Box.TextAlign = Lbl_Align
    LblDrop.Left = _TotalWidth  ' DropDown "Button"
    LblDrop.Height = _BoxHeight
    If _ColumnCount > 1 Then    ' All but first
        Controls.AddRange({Box, Hdr})
    End If
    Me.ResumeLayout(True)
    RedrawControls()
End Sub

如何调用这个方法的例子: 隐藏,复制Code

Mccb1.AddColumn(140, "Name")    ' Align not specified = HorizontalAlignment.Left
Mccb1.AddColumn(35, "Age", HorizontalAlignment.Center)
Mccb1.AddColumn(90, "Due date", 2)  ' 2 = HorizontalAlignment.Center
Mccb1.AddColumn(90, "Amount (US$)", HorizontalAlignment.Right)

如前所述,AddColumn方法创建新列,并设置其不可更改的属性。但是要完全完成在组件设置时,我们必须初始化可以随时更改的属性。因此,我们将创建一个特定的(私有的)子例程(RedrawControls),它也被AddColumn方法(最后一条指令)调用:注意,因为控件的大小改变了(Me)。高度,. Me.Width),控件的调整大小事件将被触发: 隐藏,收缩,复制Code

Private Sub RedrawControls()
    Me.SuspendLayout()
    MyLV.Top = _HeaderHeight + _BoxHeight - 2
    MyLV.BackColor = _ListBackColor
    MyLV.ForeColor = _ListForeColor
    MyLV.BorderStyle = _ListBorderStyle
    Dim Name As String
    For iCtr As Integer = 0 To _ColumnIndex ' For each Column...
        Name = "Box" & iCtr.ToString
        Controls(Name).Top = _HeaderHeight - 1
        Controls(Name).Height = _BoxHeight
        Controls(Name).BackColor = _BoxBackColor
        Controls(Name).ForeColor = _BoxForeColor
        Dim Lbl As Label = CType(Controls(Name), Label)
        Lbl.BorderStyle = _BoxBorderStyle
        Name = "Hdr" & iCtr.ToString
        Controls(Name).Height = _HeaderHeight
        Controls(Name).BackColor = _HeaderBackColor
        Controls(Name).ForeColor = _HeaderForeColor
        Lbl = CType(Controls(Name), Label)
        Lbl.BorderStyle = _HeaderBorderStyle
    Next
    LblDrop.Top = _HeaderHeight - 1
    LblDrop.Height = _BoxHeight
    _Me_MinHeight = _HeaderHeight + _BoxHeight - 1
    Me.Height = _Me_MinHeight
    Me.Width = _TotalWidth + 20 ' 20=LblDrop.Width
    Me.ResumeLayout(True)
End Sub

查看所提供的源项目。代码或复制调用RedrawControls的所有其他属性。特别注意两个操作不同的属性:第一个是ListFontStyle,它的类型是由Enum LFStyle定义的,它设置变量_ListFontStyle并调用每当字体改变时发生的事件(FontChanged)。第二个是LayerOrder,它的类型是由枚举LayOrder定义的,它设置变量_LayerOrder,但是它的操作是在之前执行的,这取决于它之前的值。为什么?因为,如果a和b没有任何疑问,那么将值设置为0 (Normal)就意味着要更改最后的行为。该操作也必须在控件加载时在控件的加载事件中执行。让我们看看Load和FontChanged事件,以及两个属性: 隐藏,复制Code

Private Sub MCCB_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If _LayerOrder = 1 Then
        Me.BringToFront()
    ElseIf _LayerOrder = 2 Then
        Me.SendToBack()
    End If
End Sub

隐藏,复制Code

Private Sub MCCB_FontChanged(sender As Object, e As EventArgs) Handles Me.FontChanged
    MyLV.Font = New Font(Me.Font, If(_ListFontStyle = 0, _
                                    Me.Font.Style, FontStyle.Regular))
End Sub

隐藏,复制Code

<Category("_MCCB specifics")> _
<Description("Action in List when Control's Font changes to Bold")> _
Public Property ListFontStyle() As LFStyle
    Get
        Return _ListFontStyle
    End Get
    Set(ByVal value As LFStyle)
        _ListFontStyle = value
        MCCB_FontChanged(Nothing, Nothing)
    End Set
End Property

隐藏,复制Code

<Category("_MCCB specifics")> _
<Description("Control's Layer Order Action")> _
Public Property LayerOrder() As LayOrder
    Get
        Return _LayerOrder
    End Get
    Set(ByVal value As LayOrder)
        If value = 1 OrElse (value = 0 And _LayerOrder = 2) Then
            Me.BringToFront()
        ElseIf value = 2 OrElse (value = 0 And _LayerOrder = 1) Then
            Me.SendToBack()
        End If
        _LayerOrder = value
    End Set
End Property

让我们创建一个为列表提供内容的方法。它需要一个字符串数组,每个子项一个字符串,包括任何隐藏列。它很简单,因为这样的数组可以直接转换为所需的ListViewItem类型。返回一个布尔值,表示操作的成功(True)或失败(False): 隐藏,复制Code

Public Function AddRow(SubItems As Array) As Boolean
    Dim OK As Boolean = False
    If SubItems.Length > _ColumnIndex + 1 Then
        MsgBox("SubItems (" & SubItems.Length.ToString & _
               ") exceeds the number of Columns (" & _
               (_ColumnIndex + 1).ToString & ")...", _
               MsgBoxStyle.Critical, _Error)
    Else
        Try
            MyLV.Items.Add(New ListViewItem(SubItems))
            _ItemsCount += 1
            OK = True
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, _Error)
        End Try
    End If
    Return OK
End Function

如何调用这个方法的例子: 隐藏,复制Code

Dim vAge As Byte = 35
Dim vDate As String = Today.ToShortDateString
Dim vValue As Single = 1234.56
If Mccb1.AddRow({"John Smith", vAge.ToString, vDate, Format(vValue, "#,###.00")}) = False Then
   ' Something went wrong...
End If

当选择列表行时,必须在相应的框中显示该行的子项。为了执行这个任务,让我们创建一个子ShowSelectedItem,以及要执行这个任务的三种情况:1-我们的控件的属性(不可浏览和隐藏)SelectedIndex, 2-我们的控件的方法FindNextItem和3- ListView事件ItemSelectionChanged。我们控制火灾的事件(ItemSelectionChanged)(代码片段# 1),选择是提高了,每当一个新行,并提供一个字符串数组的值的所有子项选定行,也简单的子()(代码片段# 2)用于显示一个错误消息,当检测到无效的负折射率,和一个函数(GetSubItems)准备上述一系列字符串,用于方法FindNextItem: 隐藏,复制Code

Public Event ItemSelectionChanged(SubItems As Array)

隐藏,复制Code

Private Sub MsgNoNeg(Prefx As String)
    MsgBox(Prefx & " cannot be negative...", _
           MsgBoxStyle.Critical, _Error)
End Sub

隐藏,复制Code

Private Sub ShowSelectedItem()
    Dim BoxName As String
    For iCtr As Integer = 0 To _ColumnIndex
        BoxName = "Box" & iCtr.ToString
        Controls(BoxName).Text = MyLV.Items(_SelectedIndex).SubItems(iCtr).Text
    Next
End Sub

隐藏,复制Code

Private Function GetSubItems() As Array
    Dim SubItems(_ColumnIndex) As String
    For iSI As Integer = 0 To _ColumnIndex
        SubItems(iSI) = MyLV.Items(_SelectedIndex).SubItems(iSI).Text
    Next
    Return SubItems
End Function

隐藏,复制Code

 <Browsable(False)> _
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
Public Property SelectedIndex() As Integer
    Get
        Return _SelectedIndex
    End Get
    Set(ByVal value As Integer)
        If value < 0 Then
            MsgNoNeg("Index")
        Else
            If value >= _ItemsCount Then
                MsgBox("Last Index = " & (_ItemsCount - 1).ToString, _
                       MsgBoxStyle.Critical, _Error)
            Else
                If _SelectedIndex >= 0 Then
                    MyLV.Items(_SelectedIndex).Selected = False
                End If
                _SelectedIndex = value
                MyLV.Items(_SelectedIndex).Selected = True
                ShowSelectedItem()
                ShowHideList(Show:=False)    'Close List
            End If
        End If
    End Set
End Property

隐藏,收缩,复制Code

Public Function FindNextItem(ColumnIndex As Integer, SearchString As String) As Array
    Dim FoundItem(_ColumnIndex) As String
    If ColumnIndex >= 0 Then
        If ColumnIndex > _ColumnIndex Then
            MsgBox("Maximum ColumnIndex is " & _ColumnIndex.ToString & "...", _
                   MsgBoxStyle.Critical, _Error)
        Else
            If ColumnIndex = _FNIlastIdx And SearchString = _FNIlastStr Then
                ' Same values, serch next
                _FNI_iFrom += 1
            Else
                ' New values, search first
                _FNI_iFrom = 0
                _FNIlastIdx = ColumnIndex
                _FNIlastStr = SearchString
            End If
            If _FNI_iFrom >= 0 Then

                Dim Found As Boolean = False
                Dim iCtr As Integer
                For iCtr = _FNI_iFrom To _ItemsCount - 1
                    If Strings.InStr(MyLV.Items(iCtr).SubItems(ColumnIndex).Text, _
                                     SearchString, CompareMethod.Text) > 0 Then
                        ' Item found...
                        Found = True
                        _SelectedIndex = iCtr
                        FoundItem = GetSubItems()
                        ' Select Item
                        If _SelectedIndex >= 0 Then
                            MyLV.Items(_SelectedIndex).Selected = False
                        End If
                        MyLV.Items(_SelectedIndex).Selected = True
                        ShowSelectedItem()
                        ShowHideList(True)
                        Exit For
                    End If
                Next
                _FNI_iFrom = iCtr
                If Found = False And iCtr = _ItemsCount Then
                    MsgBox("No match...", MsgBoxStyle.Information, "Info")
                    FoundItem = Nothing
                End If
            End If
        End If
    Else
        MsgNoNeg("ColumnIndex")
    End If
    Return FoundItem
End Function

隐藏,复制Code

Private Sub MyLV_ItemSelectionChanged(sender As Object, e As ListViewItemSelectionChangedEventArgs) _
            Handles MyLV.ItemSelectionChanged
    Dim FoundItem(_ColumnIndex) As String
    If e.IsSelected Then
        _SelectedIndex = e.ItemIndex
        ShowSelectedItem()
        ShowHideList(False)     ' Close List
        RaiseEvent ItemSelectionChanged(GetSubItems)
    End If
End Sub

还有两个简单的方法,Clear和下拉列表: 隐藏,复制Code

Public Sub Clear()
    MyLV.Items.Clear()
    _ItemsCount = 0
    For iCtr As Integer = 0 To _ColumnIndex
        Controls("Box" & iCtr.ToString).Text = ""
    Next
    ShowHideList(False)     ' Close the List
End Sub

隐藏,复制Code

Public Sub DropDown()
    ShowHideList(True)      ' Drop-down the List
End Sub

这是所有。我组织控制的代码在区域: 隐藏,复制Code

Imports
Enums & Variables
Public Properties
Public Methods
Public Event
Control Events
Private Subs/Functions
Initialization

#区域“初始化”是由设计器生成的代码。 最后,在你的WinForms应用程序: 将MCCB.dll复制到它的启动路径(在项目中\bin\调试或\bin\Release),然后在Visual Studio中最终的. exe文件夹中添加一个Reference: Menu Project - Add Reference…-浏览…- mccb .dll在工具箱中放置一个图标():菜单工具-选择工具箱项目…- .NET框架组件-浏览…——MCCB.dll。该图标将出现在所有Windows窗体组下。 控件本身的属性、方法和事件的简要描述 属性 盒子的背面颜色(es)。Box borderstyle -框的边框样式。盒子前色-盒子的前色。箱高-箱高(es)。标题的背面颜色。标题的边框样式。标题前的颜色。HeaderHeight -标题的高度。控制的层命令动作。ListBackColor -列表的返回颜色。列表的边框样式。ListFontStyle -当控件的字体更改为粗体时,在列表中操作。ListForeColor—列表的前颜色。MaxItemsDisp—列表中显示的最大项数。SelectedIndex—在列表中被选择(或将要被选择)的项目的索引。 方法 AddColumn(宽度为整数,文本为字符串,[Align As HorizontalAlignment = horizontalalignated .Left])—添加一个列,给定它的宽度(以像素为单位),它的(标题)文本和它的对齐方式(左、中、右)。AddRow(子条目为数组)——向列表中添加一行,给定一个字符串数组。返回一个布尔值,指示操作的成功(真)或失败(假)。清除——清除控件的列表和框。下拉列表-下拉列表。FindNextItem(ColumnIndex作为整数,SearchString作为字符串)作为数组——在给定的列的值中查找给定字符串的下一个出现点。选择发生匹配的行及其子数组物品返回。当没有更多匹配时,数组什么也不是,但是最后选中的行仍然是选中的。 事件 ItemSelectionChanged(子项目作为数组)——当从列表中选择了新行时发生。 历史 09.年3月。2016 -第一岗位 本文转载于:http://www.diyabc.com/frontweb/news365.html

原文地址:https://www.cnblogs.com/Dincat/p/13443845.html