Buon modo per aggiungere Guida sensibile al contesto a un esistente di Windows Form?
-
19-09-2019 - |
Domanda
Devo aggiungere i suggerimenti basati su database ad un App WinForms esistenti, grande. C # e .NET 3.5
mi piacerebbe evitare di dover rilasciare nuovi controlli per questo, e l'utente deve essere in grado di modificare le descrizioni dei comandi di aiuto.
La mia ipotesi migliore è quello di avvolgere i controlli esistenti in un nuovo tipo che contiene le nuove proprietà, in modo che possa assegnare una nuova proprietà come "FieldHelpName", e può utilizzare che nel modulo amministrativo così l'utente può identificare il campo chiaramente . Io darei uno ScreenID a ogni modulo e ogni record FieldHelpName sarebbe legato ad uno ScreenID. All'avvio dell'applicazione, caricare tutti i contenuti di aiuto, e sul modulo di carico, il filtro per la sua ScreenID e aggiungere le descrizioni corrispondenti utilizzando la riflessione, più probabile.
Sto cercando consigli su come fare questo processo più o per sapere se ci sono delle migliori pratiche su come fare questo ... quindi ogni aiuto è molto apprezzato. Grazie.
Soluzione 2
finito per creare una tabella di database per la configurazione e specificando nome di controllo per ogni riga, e poi loop controlli dello schermo in modo ricorsivo per aggiungere descrizioni dei comandi se il nome di controllo della corrente corrisponde al nome di controllo del record di database.
Altri suggerimenti
Perché andare in tali lunghezze?
È possibile ottenere la stessa cosa con qualcosa di più semplice:
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