기존 Windows Forms 응용 프로그램에 컨텍스트 감각 도움말을 추가하는 좋은 방법?
-
19-09-2019 - |
문제
기존 WinForms 앱인 Big One에 데이터베이스 중심 툴팁을 추가해야합니다. C# 및 .NET 3.5
이를 위해 새로운 컨트롤을 삭제하지 않아도되고 사용자는 도움말 툴팁을 편집 할 수 있어야합니다.
가장 좋은 추측은 기존 컨트롤을 새로운 속성을 포함하는 새로운 유형으로 랩핑하여 "FieldHelpName"과 같은 새 속성을 할당하고 관리 모듈에서이를 사용할 수 있도록 사용자가 필드를 명확하게 식별 할 수 있도록하는 것입니다. 각 형태에 ScreenId를 할당하고 각 FieldHelpName 레코드는 ScreenID에 연결됩니다. 애플리케이션 시작시 모든 도움말 내용을로드하고 Form-Load에서 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
제휴하지 않습니다 StackOverflow