2011-12-21 6 views
1

내 응용 프로그램에서 양식의 새 인스턴스를 자식으로 여러 번 열 수 있도록하려면 고유 한 식별자가 있어야합니다. 순간고유 식별자가있는 MDI 폼에서 자식 폼의 여러 인스턴스 열기

I는 다음과 같이 수행

private int _consoleWindowCount = 0; 

private void tsBtNewConsole_Click(object sender, EventArgs e) 
{ 
    _consoleWindowCount++; 
    var consoleForm = new ConsoleForm(_consoleWindowCount) { MdiParent = this }; 
    consoleForm.FormClosing += delegate { _consoleWindowCount--; }; 
    consoleForm.Show(); 

    //This will open a new ConsoleForm with Text: Console #_consoleWindowCount 
    //Like: 
    // Console #1 
    // Console #2 

} 

나는 순간에이 문제가 :

  1. 어떻게 MDIForm (mainForm)에서 내가 프로그래밍 방식 BringToFront 같은 물건을 미상 할 수있는 것이 가능하다 또는 닫기 또는 ... 현재 기본 폼에 열려있는 하위 폼의 Text 속성에 의해
  2. 나는이 자식 폼의 고유 한 이름 지정 방식이 작동하지 않는다는 것을 알기 위해 천재적이어서는 안됩니다. 같은 양식의 5 개의 자녀 양식을 열면 Console #1부터 Console #5까지 번호가 매겨집니다. 그러나 내가 닫으면 Console #4라고 말하면서 (동일한 양식의 새 양식을 열면!) Console #5이라는 이름이 붙을 것이고 같은 이름을 가진 두 개의 양식을 갖게 될 것입니다. 이 문제를 해결할 수 있다면 사용자가 양식을 구별 할 수있을 때 유용합니다.

그런 경우에 당신의 조언을 기대하십시오! 그래서 나중에는 검색 할 수

string id = Guid.NewGuid().ToString(); 

그런 다음 양식 Tag에서 GUID를 저장할 수 있으며, ID를 저장 FormManager을 만듭니다

답변

1

로직이 _consoleWindowCount 변수로 약간 깨졌습니다.

예 : 당신이 ConsoleForm 생성자의 ID 번호를 전달하기 때문에 당신이 ID 번호를 사용할 수 있도록

은 그냥 폼에 읽기 전용 속성을 추가 새로운 형태를 만들기

public class ConsoleForm : Form { 
    private int _FormID; 

    public ConsoleForm(int formID) { 
    _FormID = formID; 
    this.Text = "Console #" + _FormID.ToString(); 
    } 

    public int FormID { 
    get { return _FormID; } 
    } 
} 

을 것 자녀 컬렉션을 반복하고 사용할 수있는 ID를 찾으려면 다음을 작성해야합니다.

private void tsBtNewConsole_Click(object sender, EventArgs e) { 
    int nextID = 0; 
    bool idOK = false; 

    while (!idOK) { 
    idOK = true; 
    nextID++; 
    foreach (ConsoleForm f in this.MdiChildren.OfType<ConsoleForm>()) { 
     if (f.FormID == nextID) 
     idOK = false; 
    } 
    } 

    var consoleForm = new ConsoleForm(nextID); 
    consoleForm.MdiParent = this; 
    consoleForm.Show(); 
} 

동일한 반복을 사용하여 작업 할 양식 :

private void ShowChildForm(int formID) { 
    foreach (ConsoleForm f in this.MdiChildren.OfType<ConsoleForm>()) { 
    if (f.FormID == formID) 
     f.BringToFront(); 
    } 
} 
+0

감사합니다. 이것은 매우 도움이되었습니다. –

0

시도는 아이디로 GUID을 할당합니다.

희망이 있습니다.

+0

감사합니다. 이것은 더 고유합니다. 또한 새로운 각 열린 양식의 Text 속성을 사용자가 구별 할 수 있어야합니다. –

+0

죄송합니다. –