Un bon moyen d'ajouter une aide contextuelle à un Windows existant application de formulaires?

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

Question

Je dois ajouter infobulles à la base de données axée sur un WinForms App, grand existant. C # et .NET 3.5

Je voudrais éviter d'avoir à déposer de nouveaux contrôles pour cela, et l'utilisateur doit pouvoir modifier les info-bulles d'aide.

Ma meilleure estimation est d'envelopper les contrôles existants dans un nouveau type qui contient de nouvelles propriétés, afin que je puisse attribuer une nouvelle propriété comme « FieldHelpName », et peut l'utiliser dans le module d'administration afin que l'utilisateur peut identifier le champ clairement . Je cède un ScreenID à chaque forme et chaque enregistrement de FieldHelpName serait lié à un ScreenID. Au démarrage de l'application, charger tout le contenu d'aide, et sur la forme de charge, filtre par son ScreenID et ajoutez les infobulles correspondants utilisant la réflexion, le plus probable.

Je cherche des suggestions sur la façon de faire de ce processus le mieux ou pour savoir s'il y a des meilleures pratiques sur la façon de le faire ... de sorte que toute aide est vraiment apprécié. Merci.

Était-ce utile?

La solution 2

a fini par créer une table de base de données pour la configuration et en spécifiant le nom de commande pour chaque ligne, puis les commandes d'écran en boucle récursive ajouter infobulles si le nom de contrôle actuel correspond au nom de contrôle de la base de données enregistrement.

Autres conseils

Pourquoi aller dans ces longueurs?

Vous pouvez accomplir la même chose avec quelque chose de plus simple:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top