既存のWindowsフォームアプリケーションに状況依存ヘルプを追加するための良い方法はありますか?

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

質問

私は、既存の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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top