Gute Möglichkeit, einer vorhandenen Windows Forms-Anwendung kontextsensitive Hilfe hinzuzufügen?
-
19-09-2019 - |
Frage
Ich muss datenbankgesteuerte Tooltips zu einer vorhandenen WinForms-App, Big One, hinzufügen. C# und .net 3.5
Ich möchte vermeiden, dass ich dafür neue Steuerelemente fallen lassen muss, und der Benutzer muss in der Lage sein, die Hilfetooltips zu bearbeiten.
Meine beste Vermutung ist es, die vorhandenen Steuerelemente in einen neuen Typ zu wickeln, der neue Eigenschaften enthält, damit ich eine neue Eigenschaft wie "fieldHelpname" zuweisen kann und diese im Verwaltungsmodul verwenden kann, damit der Benutzer das Feld klar identifizieren kann. Ich würde jedem Formular einen Screenid zuweisen und jeder FieldHelpName -Datensatz würde mit einem Screenid verknüpft. Laden Sie beim Anwendungsstart den gesamten Hilfsinhalt und filtern Sie die entsprechenden Tooltips mit Reflexion höchstwahrscheinlich mit der Form von Formladung.
Ich suche nach Vorschlägen, wie man diesen Prozess am besten macht oder ob es Best Practices gibt, wie dies zu tun ist ... also wird jede Hilfe wirklich geschätzt. Vielen Dank.
Lösung 2
Am Ende erstellte eine Datenbanktabelle für die Konfiguration und das Angeben von Steuernamen für jede Zeile und dann rekursiv, um Tooltips hinzuzufügen, wenn der aktuelle Steuername mit dem Steuernamen des Datenbankdatensatzes übereinstimmt.
Andere Tipps
Warum in solche Längen gehen?
Sie können dasselbe mit etwas Einfacherem erreichen:
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