Un bon moyen d'ajouter une aide contextuelle à un Windows existant application de formulaires?
-
19-09-2019 - |
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.
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