Хороший способ добавить контекстно-зависимую справку в существующее приложение Windows Forms?

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

Вопрос

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

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

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

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

Это было полезно?

Решение 2

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

Другие советы

Зачем вдаваться в такие подробности?

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

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top