2011-12-21 3 views
1

私のアプリケーションでは、一意の識別子を持つ子フォームとして新しいフォームを開くことができます。それはMDIFormの(MainFormを)から、私はプログラム的BringToFront関数のようなものをDOEことが可能である方法一意の識別子を持つMDIフォームで子フォームの複数のインスタンスを開きます

  1. 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 
    
    } 
    

    私は現時点では2つの問題を持っている:私はこのようなん瞬間

    または閉じるまたは...現在のメインフォームで開いている子フォームのTextプロパティによって

  2. 私は子供フォームの一意の名前付けのこの方法が機能していないことを確認するべき天才ではありません。 5つの子フォーム(同じフォームのもの)を開くと、Console #1からConsole #5のように番号が付けられます。しかし、もし私が閉じると言うとConsole #4と私は新しいフォーム(同じフォームの!)を開きますそれはConsole #5と私は同じ名前の2つのフォームを持つ名前になります。これを修正することができれば、ユーザーがフォームを区別できるようにすることは素晴らしいことです。

このような場合のヒントをお楽しみください! IDとしてGUIDを割り当てる

答えて

1

ロジックは、_consoleWindowCount変数で少し壊れていると思います。

あなたはID番号を使用することができますので、ちょうどそのフォームにReadOnlyプロパティを追加し、ConsoleFormコンストラクタで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

試してみてください。

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

次にあなたがそう後であなたが取得することができ、フォームTagGUIDを保存、とIDを保存FormManagerを作成することができます。

希望します。

+0

ありがとう、これはよりユニークになります。しかし、私はそれぞれの新しい開いたフォームのTextプロパティがユーザによって区別できる必要があります。 –

+0

それは意味があります、申し訳ありません。 –

関連する問題