2013-05-03 82 views
1

我正在使用winforms。打開第二個表格,右下一個表格

我創建了一個即將完成的應用程序。考慮以下幾點:我有兩種形式,第一種形式從應用程序啓動開始,第二種形式需要在第一種形式旁邊打開。

實施例:

Form collision

我怎樣才能在第二形式訪問所述第一形式的位置?我應該將「this」發送給第二個表單的構造函數嗎?

編輯

下面的代碼幫了我:

private void changelogToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (_changelog.IsDisposed) 
    { 
      _changelog = new Changelog(); 
    } 
      _changelog.Location = new Point((Left + Width), Top); 
      _changelog.Show(); 
} 

回答

3

一個基本原則要牢記一個設計的構造方法時:永不放棄的構造任何不必要的信息。

所以,你需要的不是其他窗口,而是它的位置。 更好的是,您需要新窗口應該位於的位置。

這意味着,你不應該讓第二種形式瞭解的第一種形式,而不是它的構造應該採取兩種:

  1. 一個參數Point location
  2. 兩個參數int x, int y

根據在你的優先。 你當然可以(應該)有兩個構造函數,所以你可以決定是否給Point locationint x, int y

這一切都說,忘了你讀什麼。

SecondForm form = new SecondForm() 
{ 
    Location = new Point(this.Right, this.Top) 
}; 

這只是一個說法的另一種方式:

SecondForm form = new SecondForm(); 
form.Location = new Point(this.Right, this.Top); 
+0

會接受你的答案時,我允許這樣做,因爲你的回答解決了這一問題 – Max 2013-05-03 11:58:41

+0

@Mobstaa很樂意幫忙, 感謝你的接納 :) – 2013-05-03 12:20:34

2

爲什麼不要把 比使用構造要好,我只想手動創建第二個窗體時設置屬性新的形式,當你打開它?

Form2 f = Form2(); 
f.Location = new Point(this.Left + this.Width, this.Top); 
f.Show(); // Or ShowDialog() 

當然,這需要第二表單屬性StartPosition設置爲FormStartPosition.Manual

相關問題