0

データベース駆動型のツールチップを既存のWinFormsアプリに追加する必要があります。C#および.NET 3.5

このために新しいコントロールを削除する必要がないようにしたいので、ユーザーはヘルプツールチップを編集できる必要があります。

私の最善の推測は、既存のコントロールを新しいプロパティを含む新しいタイプでラップして、「FieldHelpName」のような新しいプロパティを割り当て、ユーザーがフィールドを明確に識別できるように管理モジュールで使用できるようにすることです。各フォームにScreenIDを割り当てると、各FieldHelpNameレコードがScreenIDにリンクされます。アプリケーションの起動時にすべてのヘルプコンテンツをロードし、フォームのロード時にScreenIDでフィルタリングし、おそらくリフレクションを使用して対応するツールチップを追加します。

このプロセスを最適に実行する方法についての提案を探しています。または、これを実行する方法に関するベストプラクティスがあるかどうかを知りたいので、助けていただければ幸いです。ありがとう。

4

2 に答える 2

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
于 2010-01-10T17:22:03.603 に答える
0

最終的に、構成用のデータベーステーブルを作成し、各行のコントロール名を指定し、現在のコントロール名がデータベースレコードのコントロール名と一致する場合は、画面コントロールを再帰的にループしてツールチップを追加します。

于 2011-04-06T22:54:58.263 に答える