从数据库中检索控件

时间:2014-05-16 13:24:03

标签: vb.net winforms visual-studio-2012

我正在创建一个需要动态加载控件的应用程序(精确按钮)。这些按钮完全相同,因此问题不在于以编程方式创建控件,而是以某种方式使它们工作。每个按钮都应打开一个表单,表单基于按钮中的一些数据。我希望所有按钮都使用一个事件处理程序,并根据它包含的数据打开表单。有没有办法这样做?我还不知道这些表格的类型,因此我无法使用预先定义的"选择案例"或任何会限制可能性的东西。

另一个问题是我希望安装一些表格(模块)和#34;独立。有没有办法让这成为可能?我相信可以使用dll完成,但我不确定。有没有相关的信息,我一直在寻找,但一无所获。

3 个答案:

答案 0 :(得分:1)

关于你的第一个问题:你可以在代码中创建按钮;以下问题的答案应该足以让你开始(这是C#,但原则是相同的):

简而言之:

  • 从数据库(或配置文件或其他)中读取按钮配置数据
  • 将按钮添加到您的用户界面(见上文),
  • 使用AddHandler为每个按钮添加事件处理程序。例如:

    AddHandler myButton.Click, Sub(sender, e)
                                   ' Do something
                               End Sub
    

(关于你的第二个问题:1。我不清楚你在问什么,2。你不应该在同一个问题中提出两个问题。我建议你为此开一个新的SO问题并尝试更清楚地解释您的要求。)

答案 1 :(得分:0)

也许我对你的答案不太了解......但对于你的按钮:

1)创建一个自定义控件,继承Button控件,并添加用于创建表单的属性。

2)在您的eventHandler引用的Sub中,第一个参数是引发事件的控件(按钮),因此您可以使用它自己的属性来创建表单...

答案 2 :(得分:0)

加入Heinzi的帖子:

保留您创建的按钮名称列表,以便与AddHandler()一起使用。

此代码并非完全符合要点,但它显示了如何在运行时使用AddHandler():

   ' hook TextChanged/CheckedChanged for dirty logic
    Dim chk As CheckBox
    Dim rdo As RadioButton
    For Each c As Control In FormDataControls
        If c.Name.StartsWith("chk") Then
            chk = c
            AddHandler chk.CheckedChanged, AddressOf SetDirty
        ElseIf c.Name.StartsWith("rdo") Then
            rdo = c
            AddHandler rdo.CheckedChanged, AddressOf SetDirty
        Else
            AddHandler c.TextChanged, AddressOf SetDirty
        End If
    Next

FormDataControls是我要定位的控件列表。在我的例子中,我使用Tag属性来指定数据控件。