2011-12-21 34 views
1

在我的應用程序中,我希望能夠多次使用窗體的新實例作爲子窗體,同時它們具有唯一標識符。在具有唯一標識符的MDI窗體中打開子窗體的多個實例

目前,我這樣做:

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. 怎麼可能從mdi窗體(MainForm的),我可以編程母鹿東西一樣BringToFront或者關閉或...通過當前在主窗體中打開的子窗體的Text屬性
  2. 我不應該是一個天才,以找出這種獨特命名的子窗體的方式是行不通的。如果我打開5個孩子(形式相同),他們將被編號爲Console #1Console #5。但是,如果我關閉讓我們說Console #4,如果我打開一個新的表格(相同的形式!)它將被命名爲Console #5然後我將有兩個同名的表格。如果這可以修復,那麼對於用戶可以區分的表單來說,這將非常有用。

期待您在這種情況下的提示!

回答

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

謝謝,這非常有幫助! – 2011-12-21 17:27:15

0

嘗試指派GUID作爲ID:

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

然後,你可以存儲在形式TagGUID,並創建存儲ID的FormManager,所以以後你可以檢索即可。

希望它有幫助。

+0

謝謝,這使得它更獨特。但我也需要用戶區分每個新打開表單的Text屬性。 – 2011-12-21 13:35:44

+0

它很有道理,對不起。 – 2011-12-21 13:38:04

相關問題