zoukankan      html  css  js  c++  java
  • 如何创建一个简单的(用户控制)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

  • 相关阅读:
    mysql 查看删除触发器等操作
    gtid同步异常处理
    使用MongoDB数据库(2)(三十六)
    使用MongoDB数据库(1)(三十五)
    使用Redis数据库(2)(三十四)
    使用Redis数据库(1)(三十三)
    多数据源配置与使用(2)(三十二)
    多数据源配置与使用(1)(三十二)
    使用Spring-data-jpa(2)(三十一)
    使用Spring-data-jpa(1)(三十)
  • 原文地址:https://www.cnblogs.com/Dincat/p/13443845.html
Copyright © 2011-2022 走看看