2012-04-08 3 views
1

2 개의 폼이 있습니다. 양식 1에서 treeview가 있습니다. 하나의 방법으로, 나는 점검 한 노드 목록을 얻는다.form1의 새 인스턴스를 만들지 않고 form2의 form1 메서드를 호출하려면 어떻게해야합니까?

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; 
     } 

어떻게 Form1의 새없이 양식 2의 방법 CreateListOfCheckedNodes를 호출 할 수 있습니까? 이 전화 번호 :

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

오류가 발생했습니다!

제발 도와주세요!

답변

3

두 형식 모두에서 액세스 할 수있는 새 클래스로 코드를 이동하십시오.

멤버 변수를 사용하지 않으면 메서드를 정적으로 만들 수 있습니다 (코드를 한눈에 보면이 경우를 알 수 있습니다).

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

는 또한 그것을 TreeNodeCollection 클래스의 extension method하게 고려할 수 있지만, 그것은 당신의 동료를 놀라게 할 수 있으므로이주의해야합니다.

+0

form2의 form1 컨트롤에 액세스하는 방법은 무엇입니까? –

+0

@a_ahmadi : 왜 그게 필요하니? 메서드는 매개 변수로 전달 된 컨트롤 이외의 컨트롤에 액세스하지 않습니다. –

+0

나는 새로운 클래스를 만든다. (당신의 도움으로 고맙다.) 폼 1에서 treeview 컨트롤을 사용한다. TreeNodeCollectionHelper.CreateListOfCheckedNodes (TreeData); TreeData는 form1의 TreeView 컨트롤의 이름입니다. 폼 2의 폼 1의 TreeView를 호출하여 동일한 컨트롤에 액세스하려면 어떻게해야합니까? –

1

나는 당신의 질문을 이해하지 못했지만 클래스의 인스턴스를 만들지 않고 메서드를 호출하는 방법을 묻는다면 메서드를 정적으로 만들어야합니다.

관련 문제