Хороший способ добавить контекстную справку в существующее приложение Windows Forms? - PullRequest
0 голосов
/ 10 января 2010

Мне нужно добавить подсказки на основе базы данных в существующее приложение WinForms, большое. C # и .NET 3.5

Я бы хотел избежать для этого новых элементов управления, и пользователь должен иметь возможность редактировать всплывающие подсказки.

Мое лучшее предположение - обернуть существующие элементы управления в новый тип, который содержит новые свойства, чтобы я мог назначить новое свойство, например «FieldHelpName», и использовать его в административном модуле, чтобы пользователь мог четко идентифицировать поле , Я бы назначил ScreenID для каждой формы, и каждая запись FieldHelpName будет связана с ScreenID. При запуске приложения загрузите все содержимое справки, а при загрузке формы отфильтруйте его по ScreenID и, скорее всего, добавьте соответствующие всплывающие подсказки с помощью отражения.

Я ищу предложения о том, как сделать этот процесс лучше всего, или узнать, есть ли какие-либо лучшие практики, как это сделать ... поэтому любая помощь действительно ценится. Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

Закончилось создание таблицы базы данных для конфигурации и указание имени элемента управления для каждой строки, а затем рекурсивный цикл экранных элементов управления для добавления всплывающих подсказок, если текущее имя элемента управления соответствует имени элемента управления записи базы данных.

0 голосов
/ 10 января 2010

Зачем идти на такие длины?

Вы можете сделать то же самое с помощью чего-то более простого:

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
...