0

我必须将数据库驱动的工具提示添加到现有的 WinForms 应用程序,大的。C# 和 .NET 3.5

我想避免为此删除新控件,并且用户必须能够编辑帮助工具提示。

我最好的猜测是将现有控件包装在包含新属性的新类型中,以便我可以分配一个新属性,如“FieldHelpName”,并可以在管理模块中使用它,以便用户可以清楚地识别该字段。我会为每个表单分配一个 ScreenID,每个 FieldHelpName 记录将链接到一个 ScreenID。在应用程序启动时,加载所有帮助内容,在表单加载时,通过其 ScreenID 过滤并使用反射添加相应的工具提示,很可能。

我正在寻找有关如何最好地执行此过程的建议,或者了解是否有任何有关如何执行此操作的最佳实践......所以非常感谢任何帮助。谢谢。

4

2 回答 2

0

最后为配置创建一个数据库表并为每一行指定控件名称,然后如果当前控件名称与数据库记录的控件名称匹配,则递归循环屏幕控件以添加工具提示。

于 2011-04-06T22:54:58.263 回答
0

为什么要这么长?

你可以用更简单的方法完成同样的事情:

Private _ToolTipList As New List(Of ToolTip)

<Extension()> _
Public Function CreateForm(ByVal formType As Type) As Form
  If (formType Is Nothing) Then
    Throw New ArgumentNullException("formType")
  End If
  If (Not GetType(Form).IsAssignableFrom(formType)) Then
    Throw New InvalidOperationException _
        (String.Format("The type '{0}' is not a form.", formType.FullName))
  End If

  Dim ctor = formType.GetConstructor(New Type() {})
  If (ctor Is Nothing) Then
    Throw New InvalidOperationException _
        (String.Format _
            ("The type '{0}' does not have a public default constructor.", _
            formType.FullName))
  End If

  Dim frm As Form = ctor.Invoke(New Object() {})
  Dim toolTip As New ToolTip(New Container())
  LoadToolTipData(toolTip, frm)
  _ToolTipList.Add(toolTip)

  Return frm

End Function

Private Sub LoadToolTipData(ByVal toolTip As ToolTip, _
                            ByVal ctrl As Control, _
                   Optional ByVal parentHierarchy As String = "")

  Dim currentHierarchy = parentHierarchy & "." & ctrl.Name
  Dim toolTipText = LoadDataFromDb(currentHierarchy)
  If Not String.IsNullOrEmpty(toolTipText) Then
    toolTip.SetToolTip(ctrl, toolTipText)
  End If

  For Each c As Control In ctrl.Controls
    LoadToolTipData(toolTip, c, currentHierarchy)
  Next

End Sub

Private Function LoadDataFromDb(ByVal key As String) As String
  Return String.Empty
End Function
于 2010-01-10T17:22:03.603 回答