2014-07-25 1 views
0

(내가 예제 코드의 단순화를 위해 목록으로 변경 내가 C#을 사용하여 인스턴스 내가 양식 2 양식 1에서 만든 클래스의 인스턴스를 사용하려면 2

namespace automationControls.FileTime 
{ 
    public class Form_Main : Form 
    { 
     public List<string> folderList; //<---- i want to access this..... 

     private void button_showForm2_Click(object sender, EventArgs e) 
     { 
      Form_Log ConfirmBoxForm = new Form_Log(this); 
      ConfirmBoxForm.Show(); 
     } 
} 

//form_Main opens form_Log 


namespace automationControls.FileTime 
{ 
    public partial class Form_Log : Form 
    { 
     public Form_Log(Form_Main _f1) 
     { 
      InitializeComponent(); 
     } 

     private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
     { 
      How.Do.I.AccessForm_Main.folderList.Clear();//<---- ............. in this function 
     } 
    } 
} 

는 응답 "더 spoonfeeding이 허용되지 않습니다"어떻게 인해 말하지 않았지만 아니라, 나는 양식이 내가이 있었다 가지고 조언 그것을 (어떤 점에서 지우기 IT). 을 수정할 수 있도록하려면 : Form_Log의 생성자에서 _f1에 대한 참조를 Form_Log의 다른 위치에서 액세스 할 수있는 곳에 저장하십시오.

+0

내가 당신의 문제가 무엇인지 잘 모르겠습니다 도움이되기를 바랍니다. Selman22의 솔루션은 옳은 것처럼 보이지만 너무 명백하기 때문에 문제가 될 수는 없습니다. – Dbl

+0

@ AndreasMüller Selman22가 해결했습니다. 그러나 내가 모르는 또 다른 문제가 있었고 그것을 깨닫지 못하게했다. (FormClosing 함수가 어떻게 든 연결 해제되고 쓸모가 없었다. 많은 편집 실행 취소를 통해 추정된다.) 또한 C#을 처음 접한다면 그의 대답을 게시했다. (나는 이전에 시도한 것과 잘못되었다고 편집했다.) 나는 다른 곳에서 실수를 보았다. –

+0

괜찮습니다. 당신이 그걸 고쳐 주셨으면 좋네요. 그의 대답을 올바른 것으로 표시하십시오. – Dbl

답변

2

이미 양식을 추가 한 생성자를 사용하지 않는 이유는 무엇입니까?

public static List<string> folderList; 

당신은 단순히 어떤 형태의 예에서 호출 할 수 있습니다 : 형식 2를 다음과 같이 : Form1에있는

private Form_Main _mainForm; 
public Form_Log(Form_Main _f1) 
{ 
    InitializeComponent(); 
    _mainForm = _f1; 
} 

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{ 
    var myList = _mainForm.folderList; 
} 
+0

고맙습니다. 이것은 내가 필요한 전부였다. –

-2

이 넣어

From1.folderList.Clear(); 
+0

이 액세스 권한을 읽고 읽을 수 있습니다. – Youness

1

이 시도를

public class Form_Main : Form 
{ 
    public List<string> folderList; //<---- i want to access this..... 

    private void button_showForm2_Click(object sender, EventArgs e) 
    { 
     Form_Log ConfirmBoxForm = new Form_Log(this); 
     ConfirmBoxForm.Show(); 
    } 
} 

서식 로그 :

public partial class Form_Log : Form 
{ 
    private Form_Main _mainForm; 
    public Form_Log(Form_Main _f1) 
    { 
     InitializeComponent(); 
     _mainForm = _f1; 
    } 

    private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
    { 
     _mainForm.folderList.Clear(); 
    } 
} 
1

프로젝트가 얼마나 발전했는지 알 수는 없지만이 경우 대리인을 사용합니다. 여기에 내가 어떻게 할 것입니다 :

public delegate void ModifyCollectionHandler(string parameter); 
public delegate void ClearCollectionHandler(); 
public partial class Form1 : Form 
{ 
    public List<string> folderList; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 form = new Form2() 
     form.ClearItem+=form_ClearItem; 
     form.AddItem+=form_AddItem; 
     form.DeleteItem+=form_DeleteItem; 
    } 

    void form_DeleteItem(string parameter) 
    { 
     if (folderList == null) 
      return; 
     folderList.Remove(parameter); 
    } 

    void form_AddItem(string parameter) 
    { 
     if (folderList == null) 
      folderList = new List<string>(); 
     folderList.Add(parameter); 
    } 

    void form_ClearItem() 
    { 
     if (folderList != null) 
      folderList.Clear(); 
    } 
} 
public partial class Form2 : Form 
{ 
    public event ModifyCollectionHandler AddItem; 
    public event ModifyCollectionHandler DeleteItem; 
    public event ClearCollectionHandler ClearItem; 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (ClearItem != null) 
      ClearItem(); 
    } 
} 

내가 당신 : 감사합니다