使用VB.NET开发复合控件

简介: 使用VB.NET开发复合控件 界面: 控件类型   名称               文本  ListBox     lstSource ListBox     lstTargeg Button     btnAdd           Add > Button     btnAdd...

使用VB.NET开发复合控件

界面:

控件类型   名称               文本 

ListBox     lstSource

ListBox     lstTargeg

Button     btnAdd           Add >

Button     btnAddAll       Add All >>

Button     btnRemove    < Remove

Button     btnClear        << Clear

 

代码如下:

  1 Public Class SelectCombo
  2   Inherits System.Windows.Forms.UserControl
  3 
  4   ' Make the width of the area for the buttons 100 twips
  5   Dim mnButtonAreaWidth As Integer = 100
  6 
  7   ' Set minimum height and width for the control
  8   Dim mnMinControlWidth As Integer = 200
  9   Dim mnMinControlHeight As Integer = 200
 10 
 11 
 12 #Region " Windows Form Designer generated code "
 13 
 14   Public Sub New()
 15     MyBase.New()
 16 
 17     'This call is required by the Windows Form Designer.
 18     InitializeComponent()
 19 
 20     'Add any initialization after the InitializeComponent() call
 21 
 22   End Sub
 23 
 24   'UserControl1 overrides dispose to clean up the component list.
 25   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
 26     If disposing Then
 27       If Not (components Is Nothing) Then
 28         components.Dispose()
 29       End If
 30     End If
 31     MyBase.Dispose(disposing)
 32   End Sub
 33 
 34   'Required by the Windows Form Designer
 35   Private components As System.ComponentModel.IContainer
 36 
 37   'NOTE: The following procedure is required by the Windows Form Designer
 38   'It can be modified using the Windows Form Designer.  
 39   'Do not modify it using the code editor.
 40   Friend WithEvents lstSource As System.Windows.Forms.ListBox
 41   Friend WithEvents btnAdd As System.Windows.Forms.Button
 42   Friend WithEvents btnAddAll As System.Windows.Forms.Button
 43   Friend WithEvents lstTarget As System.Windows.Forms.ListBox
 44   Friend WithEvents btnRemove As System.Windows.Forms.Button
 45   Friend WithEvents btnClear As System.Windows.Forms.Button
 46   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
 47         Me.lstSource = New System.Windows.Forms.ListBox()
 48         Me.btnAdd = New System.Windows.Forms.Button()
 49         Me.btnAddAll = New System.Windows.Forms.Button()
 50         Me.btnRemove = New System.Windows.Forms.Button()
 51         Me.btnClear = New System.Windows.Forms.Button()
 52         Me.lstTarget = New System.Windows.Forms.ListBox()
 53         Me.SuspendLayout()
 54         '
 55         'lstSource
 56         '
 57         Me.lstSource.Dock = System.Windows.Forms.DockStyle.Left
 58         Me.lstSource.ItemHeight = 12
 59         Me.lstSource.Location = New System.Drawing.Point(0, 0)
 60         Me.lstSource.Name = "lstSource"
 61         Me.lstSource.Size = New System.Drawing.Size(120, 136)
 62         Me.lstSource.TabIndex = 0
 63         '
 64         'btnAdd
 65         '
 66         Me.btnAdd.Location = New System.Drawing.Point(136, 8)
 67         Me.btnAdd.Name = "btnAdd"
 68         Me.btnAdd.Size = New System.Drawing.Size(80, 24)
 69         Me.btnAdd.TabIndex = 1
 70         Me.btnAdd.Text = "Add >"
 71         '
 72         'btnAddAll
 73         '
 74         Me.btnAddAll.Location = New System.Drawing.Point(136, 40)
 75         Me.btnAddAll.Name = "btnAddAll"
 76         Me.btnAddAll.Size = New System.Drawing.Size(80, 24)
 77         Me.btnAddAll.TabIndex = 2
 78         Me.btnAddAll.Text = "Add All >>"
 79         '
 80         'btnRemove
 81         '
 82         Me.btnRemove.Location = New System.Drawing.Point(136, 72)
 83         Me.btnRemove.Name = "btnRemove"
 84         Me.btnRemove.Size = New System.Drawing.Size(80, 24)
 85         Me.btnRemove.TabIndex = 3
 86         Me.btnRemove.Text = "< Remove"
 87         '
 88         'btnClear
 89         '
 90         Me.btnClear.Location = New System.Drawing.Point(136, 104)
 91         Me.btnClear.Name = "btnClear"
 92         Me.btnClear.Size = New System.Drawing.Size(80, 24)
 93         Me.btnClear.TabIndex = 4
 94         Me.btnClear.Text = "<< Clear"
 95         '
 96         'lstTarget
 97         '
 98         Me.lstTarget.Dock = System.Windows.Forms.DockStyle.Right
 99         Me.lstTarget.ItemHeight = 12
100         Me.lstTarget.Location = New System.Drawing.Point(232, 0)
101         Me.lstTarget.Name = "lstTarget"
102         Me.lstTarget.Size = New System.Drawing.Size(120, 136)
103         Me.lstTarget.TabIndex = 5
104         '
105         'SelectCombo
106         '
107         Me.Controls.Add(Me.lstTarget)
108         Me.Controls.Add(Me.btnClear)
109         Me.Controls.Add(Me.btnRemove)
110         Me.Controls.Add(Me.btnAddAll)
111         Me.Controls.Add(Me.btnAdd)
112         Me.Controls.Add(Me.lstSource)
113         Me.Name = "SelectCombo"
114         Me.Size = New System.Drawing.Size(352, 136)
115         Me.ResumeLayout(False)
116 
117     End Sub
118 
119 #End Region
120 
121   Private Sub SelectCombo_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
122     ' Check for minimum width and height.
123     ' Throw exception if new width or height too small 
124     Dim sError As String
125     sError = "Attempted to make SelectCombo user control too small."
126 
127     If MyBase.Size.Width < mnMinControlWidth Then
128       Dim eComboException As New ApplicationException(sError)
129       eComboException.Source = Me.ToString
130     End If
131     If MyBase.Size.Height < mnMinControlHeight Then
132       Dim eComboException As New ApplicationException(sError)
133       eComboException.Source = Me.ToString
134     End If
135 
136     'Set source and target list boxes to appropriate width. Note that
137     'docking the list boxes makes their height the right size automatically.
138     Dim nListboxWidth As Integer
139     nListboxWidth = CInt(0.5 * (Me.Size.Width - mnButtonAreaWidth))
140     lstSource.Size = New Size(nListboxWidth, lstSource.Size.Height)
141     lstTarget.Size = New Size(nListboxWidth, lstSource.Size.Height)
142 
143     'Now position the buttons between the list boxes. 
144     Dim nLeftButtonPosition As Integer
145     nLeftButtonPosition = nListboxWidth + _
146            ((mnButtonAreaWidth - btnAdd.Size.Width) \ 2)
147     btnAdd.Location = New Point(nLeftButtonPosition, btnAdd.Location.Y)
148     btnAddAll.Location = New Point(nLeftButtonPosition, btnAddAll.Location.Y)
149     btnRemove.Location = New Point(nLeftButtonPosition, btnRemove.Location.Y)
150     btnClear.Location = New Point(nLeftButtonPosition, btnClear.Location.Y)
151   End Sub
152 
153   Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
154     Dim objItem As Object
155     For Each objItem In lstSource.SelectedItems
156       lstTarget.Items.Add(objItem)
157     Next objItem
158 
159   End Sub
160 
161   Private Sub btnAddAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddAll.Click
162     Dim objItem As Object
163     For Each objItem In lstSource.Items
164       lstTarget.Items.Add(objItem)
165     Next objItem

166 
167   End Sub
168 
169   Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click
170     lstTarget.Items.Clear()
171   End Sub
172 
173   Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
174     ' Have to go through the collection in reverse
175     ' because we are removing items.
176     Dim nIndex As Integer
177     For nIndex = lstTarget.SelectedItems.Count - 1 To 0 Step -1
178       lstTarget.Items.Remove(lstTarget.SelectedItems(nIndex))
179     Next nIndex
180 
181   End Sub
182 
183   Public ReadOnly Property SelectedItem(ByVal iIndex As Integer) As Object
184     Get
185       Return lstTarget.Items(iIndex)
186     End Get
187   End Property
188 
189   Public ReadOnly Property SelectedCount() As Integer
190     Get
191       Return lstTarget.Items.Count
192     End Get
193   End Property
194 
195   Public ReadOnly Property AvailableCount() As Integer
196     Get
197       Return lstSource.Items.Count
198     End Get
199   End Property
200 
201   Public Sub Add(ByVal objItem As Object)
202     lstSource.Items.Add(objItem)
203   End Sub
204 
205   Public ReadOnly Property AvailableItem(ByVal iIndex As Integer) As Object
206     Get
207       Return lstSource.Items(iIndex)
208     End Get
209   End Property
210 
211   Public Sub Clear()
212     lstSource.Items.Clear()
213     lstTarget.Items.Clear()
214 
215   End Sub
216 
217 End Class

测试中,将控件拖入WINDOW窗体,在Form_Load事件中写入

SelectCombo1.Add("1")
SelectCombo1.Add("2")
SelectCombo1.Add("3")
SelectCombo1.Add("4")
SelectCombo1.Add("5")

相关文章
|
13天前
|
人工智能 量子技术 C#
【专栏】.NET 开发:开启数字化新时代
【4月更文挑战第29天】.NET开发在数字化新时代中发挥关键作用,借助跨平台能力、高性能和现代编程语言支持,如C#,助力企业实现数字化转型。通过企业级应用开发、移动应用和云计算集成,.NET加速业务流程和提升用户体验。未来,.NET将涉足AI、ML、MR/AR及量子计算,持续推动技术创新和数字化转型。开发者应提升技能,适应高性能需求,把握发展机遇。
|
13天前
|
缓存 监控 算法
【专栏】.NET 开发:实现卓越性能的途径
【4月更文挑战第29天】本文探讨了.NET开发中的性能优化,强调了理解性能问题根源和使用分析工具的重要性。基础优化包括代码优化(如减少计算、避免内存泄漏)、资源管理及选择合适算法。高级策略涉及并行编程、缓存策略、预编译(AOT)和微服务架构。持续性能测试与监控是关键,包括性能测试、监控分析和建立优化反馈循环。开发者应持续学习和实践性能优化,以构建高性能应用。
|
13天前
|
开发框架 .NET C#
【专栏】理解.NET 技术,提升开发水平
【4月更文挑战第29天】本文介绍了.NET技术的核心概念和应用,包括其跨平台能力、性能优化、现代编程语言支持及Web开发等特性。文章强调了深入学习.NET技术、关注社区动态、实践经验及学习现代编程理念对提升开发水平的重要性。通过这些,开发者能更好地利用.NET构建高效、可维护的多平台应用。
|
13天前
|
机器学习/深度学习 vr&ar 开发者
【专栏】.NET 技术:引领开发新方向
【4月更文挑战第29天】本文探讨了.NET技术如何引领软件开发新方向,主要体现在三方面:1) 作为跨平台开发的先锋,.NET Core支持多操作系统和移动设备,借助.NET MAUI创建统一UI,适应物联网需求;2) 提升性能和开发者生产力,采用先进技术和优化策略,同时更新C#语言特性,提高代码效率和可维护性;3) 支持现代化应用架构,包括微服务、容器化,集成Kubernetes和ASP.NET Core,保障安全性。此外,.NET还不断探索AI、ML和AR/VR技术,为软件开发带来更多创新可能。
|
13天前
|
物联网 vr&ar 开发者
【专栏】.NET 技术:为开发注入活力
【4月更文挑战第29天】本文探讨了.NET技术的创新,主要体现在三个方面:1) .NET Core实现跨平台开发革命,支持多种操作系统和硬件,如.NET MAUI用于多平台UI;2) 性能提升与生产力飞跃,C#新特性简化编程,JIT和AOT优化提升性能,Roslyn提供代码分析工具;3) 引领现代化应用架构,支持微服务、容器化,内置安全机制。未来,.NET 7将带来更多新特性和前沿技术整合,如量子计算、AI,持续推动软件开发创新。开发者掌握.NET技术将赢得竞争优势。
|
13天前
|
人工智能 前端开发 Cloud Native
【专栏】洞察.NET 技术的开发趋势
【4月更文挑战第29天】本文探讨了.NET技术的三大发展趋势:1) 跨平台与云原生技术融合,通过.NET Core支持轻量级、高性能应用,适应云计算和微服务;2) 人工智能与机器学习的集成,如ML.NET框架,使开发者能用C#构建AI模型;3) 引入现代化前端开发技术,如Blazor,实现前后端一致性。随着.NET 8等新版本的发布,期待更多创新技术如量子计算、AR/VR的融合,.NET将持续推动软件开发的创新与进步。
|
13天前
|
开发框架 物联网 测试技术
【专栏】.NET 开发:打造领先应用的基石
【4月更文挑战第29天】本文探讨了.NET开发框架为何成为构建领先应用的首选。高性能与稳定性是.NET的核心优势,它采用先进的技术和优化策略,如.NET Core的轻量级设计和JIT/AOT编译模式。跨平台兼容性让开发者能用相同代码库在不同操作系统上构建应用。现代化的开发体验,如C#语言的创新特性和Visual Studio的强大工具,提升了开发者生产力。丰富的生态系统和广泛支持,包括庞大的开发者社区和微软的持续投入,为.NET提供了坚实后盾。
|
13天前
|
人工智能 前端开发 Devops
【专栏】洞察.NET 技术在现代开发中的作用
【4月更文挑战第29天】本文探讨了.NET技术在现代软件开发中的核心价值、应用及挑战。.NET提供语言统一性与多样性,强大的Visual Studio工具,丰富的类库,跨平台能力及活跃的开发者社区。实际应用包括企业级应用、Web、移动、云服务和游戏开发。未来面临性能优化、容器化、AI集成等挑战,需持续创新。开发者应深入理解.NET,把握技术趋势,参与社区,共创美好未来。
|
13天前
|
机器学习/深度学习 人工智能 开发者
【专栏】.NET 技术:为开发带来新机遇
【4月更文挑战第29天】本文探讨了.NET技术如何为软件开发带来新机遇,分为三个部分:首先,.NET的跨平台革命,包括.NET Core的兴起、Xamarin与.NET MAUI的移动应用开发、开源社区的推动及性能优化;其次,介绍了云服务与微服务架构的集成,如Azure云服务、微服务支持、DevOps与CI/CD,以及Docker容器化;最后,讨论了AI与机器学习集成,如ML.NET、认知服务、TensorFlow和ONNX,使开发者能构建智能应用。面对这些机遇,开发者应不断学习和适应新技术,以创造更多价值。
|
13天前
|
算法 Java 编译器
【专栏】.NET 开发:实现高效能的秘诀
【4月更文挑战第29天】本文探讨了提升.NET应用性能的三个方面:理解.NET运行时(垃圾回收、JIT编译器、异步编程和线程并发)、优化代码与算法(代码细节、数据结构选择和算法效率)以及利用工具和框架(性能分析工具、高性能库和CI/CD流程)。通过深入学习、合理设计和有效工具,开发者可实现.NET应用的高效能。