Gute Möglichkeit, einer vorhandenen Windows Forms-Anwendung kontextsensitive Hilfe hinzuzufügen?

StackOverflow https://stackoverflow.com/questions/2037650

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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top