0

CheckedListBoxのを表示するためListにを使用していましたPlugin。そして、私は使用していEventHandlerます:

private void myCheckedListBox_SelectedIndexChanged(object sender, EventArgs e)
{
    myGUIUtilities.SetDescription(myCheckedListBox.SelectedItem, myRichTextBox);
}

何かを表示するには...これはmyGUIUtilities.SetDescription方法です:

internal static void SetDescription(object p_SelectedObject, RichTextBox p_TextBoxDescription)
            {
                AbstractEnvChecker l_Plugin = p_SelectedObject as AbstractEnvChecker;
                if (l_Plugin != null)
                    p_TextBoxDescription.Text = l_Plugin.Description;
            }

プラグインを表示するには、CheckedListBox.Items.Add次の方法を使用しました。

MyCheckedListBox.Items.Add(myPlugin);

それは引数としてオブジェクトを受け入れます...

今、私は自分Pluginsをセトゴリーで分類したいので、とを使用TreeViewしてTreeNodeいます。

問題は、引数としてTypeTreeView.Nodes.Add(TreeNode node)のみを受け入れることです。TreeNode

そして、私は実際にプロパティを取得するためにタイプをSetDescription必要とする同じメソッドを使用することはできません...PluginPlugin.Description

オブジェクトをTreeView.Nodes.Add(TreeNode node)メソッドに渡す方法はありますか?またはそれを行う別の方法?

4

2 に答える 2

2

ツリーノードのプロパティを使用してTag、オブジェクトをアタッチします。その後、後で再び引き出すことができます。

したがって、これを行うことができます(Nameプラグインオブジェクトのプロパティを想定)

public TreeNode AddPluginNode(TreeNode parent, AbstractEnvChecker plugin)
{
  TreeNode created = new TreeNode(plugin.Name) { Tag = plugin };
  parent.Nodes.Add(created);
  return created;
}

次に、イベントハンドラーの開始を次のように書き直すことができます。

AbstractEnvChecker l_Plugin = p_SelectedObject as AbstractEnvChecker;
if(l_Plugin == null)
{
  TreeNode selNode = p_SelectedObject as TreeNode;
  if(selNode != null && selNode.Tag != null)
    l_Plugin = selNode.Tag as AbstractEnvChecker;
}
//might still be null in the future if you start using Tags for other types.
于 2012-06-13T13:12:26.960 に答える
0

TreeNodeを継承する独自のツリーノードクラスを作成できます。継承されたクラスは、tagプロパティを使用する代わりに、プラグインへの強く型付けされた参照を持つことができます。このメソッドは、さまざまな種類のオブジェクト、カスタムコンテキストメニューなどを含むかなり複雑なツリービューに使用します。

于 2012-06-28T08:20:34.300 に答える