Boa maneira de adicionar ajuda sensível ao contexto a um aplicativo Windows Forms existente?

StackOverflow https://stackoverflow.com/questions/2037650

Pergunta

Eu tenho que adicionar dicas de ferramentas orientadas ao banco de dados a um aplicativo WinForms existente, Big One. C# e .NET 3.5

Gostaria de evitar retirar novos controles para isso, e o usuário deve ser capaz de editar as dicas de ferramentas de ajuda.

Meu melhor palpite é envolver os controles existentes em um novo tipo que contém novas propriedades, para que eu possa atribuir uma nova propriedade como "FieldHelpName" e pode usá -lo no módulo administrativo para que o usuário possa identificar o campo claramente. Eu atribuiria um ScreenId a cada formulário e cada registro do FieldHelpName seria vinculado a um screenId. Na inicialização do aplicativo, carregue todos os conteúdos de ajuda e, na carga de formulário, filtre por seu screenId e adicione as dicas de ferramentas correspondentes usando a reflexão, provavelmente.

Estou procurando sugestões sobre como fazer esse processo melhor ou saber se existem práticas recomendadas sobre como fazer isso ... então qualquer ajuda é realmente apreciada. Obrigado.

Foi útil?

Solução 2

Acabou criando uma tabela de banco de dados para configuração e especificando o nome de controle para cada linha e, em seguida, loop controles de tela recursivamente para adicionar dicas de ferramentas se o nome de controle atual corresponder ao nome de controle do registro do banco de dados.

Outras dicas

Por que entrar em tais comprimentos?

Você pode realizar a mesma coisa com algo mais simples:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top