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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top