如何将绑定固定数据的ComboBox封装为可多WinForm复用的用户控件
解答
完全可以这么做,而且这是非常推荐的控件复用方案,能避免每个窗体重复写填充逻辑,后续如果要调整下拉选项的取值字段、数据源逻辑,只需要修改一次用户控件即可,不需要逐个改窗体的代码。
具体实现步骤
- 第一步:在你的项目中新建「用户控件(User Control)」,在设计界面拖入一个ComboBox控件,命名为
ComboBoxExaminer,调整好尺寸样式即可。 - 第二步:把你的填充逻辑迁移到用户控件的代码中,参考代码如下:
' 用户控件代码 Public Class ExaminerComboBoxUC ' 假设你的SQLControl是全局可访问的,也可以在这里初始化实例 Private sql As New SQLControl() Public Sub Fillcombobox() sql.AddParam("@ExaminerType", 3) sql.ExecQuery("MyStoredProcedure") ComboBoxExaminer.ValueMember = "Examiner_ID" ComboBoxExaminer.DisplayMember = "Last_Name" ComboBoxExaminer.DataSource = sql.DBDT End Sub Private Sub ExaminerComboBoxUC_Load(sender As Object, e As EventArgs) Handles MyBase.Load Fillcombobox() End Sub ' 可选:封装ComboBox常用属性,方便外层窗体调用 Public Property SelectedValue As Object Get Return ComboBoxExaminer.SelectedValue End Get Set(value As Object) ComboBoxExaminer.SelectedValue = value End Set End Property Public Property SelectedText As String Get Return ComboBoxExaminer.SelectedText End Get Set(value As String) ComboBoxExaminer.SelectedText = value End Set End Property ' 可选:冒泡常用事件给外层窗体 Public Event SelectedIndexChanged As EventHandler Private Sub ComboBoxExaminer_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxExaminer.SelectedIndexChanged RaiseEvent SelectedIndexChanged(sender, e) End Sub End Class
- 第三步:编译整个项目,编译完成后你就能在VS的工具箱里看到这个自定义的用户控件,之后开发其他窗体的时候直接把这个控件拖到窗体上即可,不需要再额外写填充逻辑,控件加载时会自动完成数据拉取和绑定。
额外优化建议
如果后续你需要支持不同的考官类型筛选,可以把@ExaminerType的参数值做成用户控件的公共属性,这样拖入控件后还可以灵活配置取值,不用固定写死3:
' 用户控件里添加公共属性 Public Property ExaminerType As Integer = 3 ' 填充方法里对应修改参数赋值 sql.AddParam("@ExaminerType", Me.ExaminerType)
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

