【问题标题】:retrieving controls from database从数据库中检索控件
【发布时间】:2023-03-15 11:59:01
【问题描述】:

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

另一个问题是我想独​​立“安装”一些表单(模块)。有没有办法让这成为可能?我相信可以使用 dll 来完成,但我不确定。有没有这方面的资料啊,我找了好久没找到。

【问题讨论】:

  • 在单击事件中(请参阅 Heinzi 的回答),评估按钮名称(使用有意义的名称而不是 Button1)以确定要对哪个表单进行操作。您还可以使用 .Tag 属性来存储附加信息。 click 事件的 sender 参数就是针对这种事情的。 thisName = CType(sender, Button).Name
  • 请不要只求我们为您解决问题。向我们展示如何尝试自己解决问题,然后向我们确切地展示结果是什么,并告诉我们您为什么觉得它不起作用。请参阅“What Have You Tried?”了解您真正需要阅读的优秀文章。

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


【解决方案1】:

关于您的第一个问题:您可以在代码中创建按钮;以下问题的答案应该足以让您入门(是C#,但原理是一样的):

简而言之:

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

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

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

【讨论】:

    【解决方案2】:

    也许我不太明白你的答案......但是对于你的按钮:

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

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

    【讨论】:

    • 他为什么要创建自定义控件? Dim b As New Button 会很好地工作
    • @Plutonix :他写道“每个按钮都应该打开一个表单,该表单基于来自按钮的一些数据”。这就是我建议的原因。
    • 我认为 1) 应该包括“和用于创建表单的方法”和 2) 可能不需要处理外部事件。即自定义控件的方法根据控件实例上设置的属性加载表单。
    【解决方案3】:

    添加到 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 属性来指定数据控件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 2011-02-07
      • 2014-01-05
      相关资源
      最近更新 更多