Buena manera de añadir ayuda sensible al contexto a una existente de Windows Forms?
-
19-09-2019 - |
Pregunta
Tengo que añadir la información de herramientas de bases de datos a una aplicación Windows Forms existentes, grande. C # y .NET 3.5
Me gustaría evitar tener que colocar nuevos controles para este, y el usuario tiene que ser capaz de editar la información sobre herramientas de ayuda.
Mi mejor conjetura es envolver los controles existentes en un nuevo tipo que contiene nuevas propiedades, de modo que pueda asignar una nueva propiedad como "FieldHelpName", y se puede utilizar que en el módulo administrativo para que el usuario pueda identificar el campo claramente . Me asigno un ScreenID a cada formulario y cada registro FieldHelpName estaría vinculada a un ScreenID. Al inicio de la aplicación, cargar todos los contenidos de la ayuda, y en forma de carga, filtro por su ScreenID y añadir la información sobre herramientas correspondientes utilizando la reflexión, lo más probable.
Busco sugerencias sobre cómo hacer este proceso mejor o para saber si hay algún mejores prácticas sobre cómo hacer esto ... así que cualquier ayuda es muy apreciada. Gracias.
Solución 2
terminó creando una tabla de base de datos para la configuración y la especificación de nombre de control para cada fila, y luego bucle controles de pantalla de forma recursiva para agregar información sobre herramientas si el nombre del control actual coincide con el nombre del control del registro de base de datos.
Otros consejos
¿Por qué ir a tales extremos?
Esto se puede hacer lo mismo con algo más 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