各ノードにカスタム プロパティを追加できるように TreeNode クラスを拡張する必要があります (WebForms TreeNode には Tag プロパティが含まれていないため)。だから、これは私の CustomTreeNode です:
public class CustomTreeNode : TreeNode
{
public CustomTreeNode()
{
}
public CustomTreeNode(int nodeId, string nodeType)
{
NodeId = nodeId;
NodeType = nodeType;
}
public string NodeType { get; set; }
public int NodeId { get; set; }
}
CustomTreeNode を作成して TreeView に追加すると、次のようになります。
CustomTreeNode node = new CustomTreeNode(1, "CustomType");
treeView.Nodes.Add(node);
次に、次のようにしてキャスト例外を取得します。
CustomTreeNode selectedNode = (CustomTreeNode)TreeView.SelectedNode;
TreeView は CustomTreeNode ではなく TreeNode を返すためです。
少し読んだところ、TreeView クラスを拡張し、CreateNode() メソッドをオーバーライドして、TreeNode ではなく CustomTreeNode を返す必要があるようです。だから私はこれを作成しました:
public class CustomTreeView : TreeView
{
protected override TreeNode CreateNode()
{
return new CustomTreeNode();
}
}
ただし、問題は CreateNode() が引数を取らないため、CustomTreeNode クラスの空のコンストラクターを呼び出す必要があることです。したがって、上記で CustomTreeNode を作成したとき、CustomTreeView からそれを取得すると、空のコンストラクターが値のないノードを返すため、nodeId と nodeType の値が失われています。
どんな助けでも大歓迎です。