Хороший способ добавить контекстную справку в существующее приложение Windows Forms?
Я должен добавить подсказки на основе базы данных в существующее приложение WinForms, большое. C# и.NET 3.5
Я бы хотел избежать для этого новых элементов управления, и пользователь должен иметь возможность редактировать всплывающие подсказки.
Мое лучшее предположение - обернуть существующие элементы управления в новый тип, содержащий новые свойства, чтобы я мог назначить новое свойство, например "FieldHelpName", и использовать его в административном модуле, чтобы пользователь мог четко идентифицировать поле. Я бы назначил ScreenID для каждой формы, и каждая запись FieldHelpName будет связана с ScreenID. При запуске приложения загрузите все содержимое справки, а при загрузке формы отфильтруйте его по ScreenID и, скорее всего, добавьте соответствующие всплывающие подсказки, используя отражение.
Я ищу предложения о том, как сделать этот процесс лучше всего, или узнать, есть ли какие-либо передовые методы, как это сделать... поэтому любая помощь действительно ценится. Благодарю.
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