2010-01-10 27 views
0

我必須將數據庫驅動的工具提示添加到現有的WinForms應用程序中。 C#和.NET 3.5將上下文相關幫助添加到現有Windows窗體應用程序的好方法?

我想避免爲此刪除新控件,並且用戶必須能夠編輯幫助工具提示。

我最好的猜測是包裝在一個新的類型,包含新特性的現有的控制,這樣我可以分配,如「FieldHelpName」一個新的屬性,並且可以使用管理模塊中,以便用戶可以識別領域清晰。我會爲每個窗體分配一個ScreenID,並且每個FieldHelpName記錄都將鏈接到一個ScreenID。在應用程序啓動時,加載所有幫助內容,並在表單加載時,按其ScreenID進行篩選,並最有可能使用反射添加相應的工具提示。

我在尋找關於如何最好地完成這個過程的建議,或者知道是否有任何有關如何做到這一點的最佳實踐...所以任何幫助都非常感謝。謝謝。

+0

什麼是編程語言C#/ VB.Net/...?什麼是.NET框架版本? – Zyphrax 2010-01-10 16:56:02

+0

啊,謝謝Zyphrax,忘了說明一下。已經編輯 – GR7 2010-01-10 17:18:11

回答

0

結束了創建一個配置數據庫表,併爲每一行指定控件名稱,然後循環屏控制遞歸到如果當前控件添加工具提示名稱與數據庫記錄的控件名稱相匹配。

0

爲什麼要這麼長?

可以完成同樣的事情用簡單的東西:

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 
+0

Paulo這個問題......這意味着我會讓用戶根據控件ID猜測字段名稱,這在大多數時間並不明顯。 – GR7 2010-01-10 17:37:53

+0

如果您要添加有關每個控件的信息,則可以在數據庫中指定顯示名稱,並讓用戶在管理應用程序上提供幫助信息。 – 2010-01-10 17:42:46

相關問題