1

私は2つのフォームを持っています。フォーム 1 には、ツリービューがあります。1 つの方法では、チェックしたノードのリストを取得します。

private void CreateListOfCheckedNodes()
        {
            TreeNodeCollection nodes = TreeData.Nodes;
            Int32 EffectedNodes = GetCheckedNodesCount(nodes);
            if (EffectedNodes > 0)
            {
              ;//my code
            }
        }

        public int GetCheckedNodesCount(TreeNodeCollection nodes)
        {
            int CheckedNodesCount = 0;

            for (int i = 0; i < nodes.Count; i++)
            {
                TreeNode node = nodes[i];
                if (node.Checked)
                {
                    TreeFieldSet Item = new TreeFieldSet { TreeId = Int32.Parse(node.Tag.ToString()), Title = node.Text };
                    MyProject.Tree.TreeCheckedNodes.TreeList.Add(Item);
                    CheckedNodesCount++;
                }

                if (node.Nodes.Count > 0)
                    CheckedNodesCount += GetCheckedNodesCount(node.Nodes);
            }
            return CheckedNodesCount;
        }

CreateListOfCheckedNodesForm1 の new なしで Form 2 のメソッドを呼び出すにはどうすればよいですか? この呼び出しで:

Tree.TreeSubjects Ts = new Tree.TreeSubjects();
Ts.CreateListOfCheckedNodes();//if CreateListOfCheckedNodes public

エラーが発生しました!

助けてください !

4

2 に答える 2

3

両方のフォームからアクセスできる新しいクラスにコードを移動します。

メンバー変数を使用しない場合は、メソッドを静的にすることができます (コードを一目見ただけで、これが事実であることがわかります)。

static class TreeNodeCollectionHelper
{
    public static int GetCheckedNodesCount(TreeNodeCollection nodes)
    {
        ...
    }
}

TreeNodeCollection クラスの拡張メソッドにすることも検討できますが、同僚を驚かせる可能性があるため、注意して行う必要があります。

于 2012-04-08T20:37:52.477 に答える
1

私はあなたの質問を完全には理解していませんが、クラスのインスタンスを作成せずにメソッドを呼び出す方法を尋ねている場合は、メソッドを静的にします。

于 2012-04-08T20:38:56.457 に答える