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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top