2011-01-05 158 views
3

從主窗體(Form1)我打電話來顯示另一個表單(Form2)。 但我希望它顯示與form1完全相同的位置和大小,以便我們無法再看到form1,直到我們關閉form2或將其移動到其他位置。所以我寫了這些行:正確顯示第一個表單的第二個表單

 Form2 f2 = new Form2(); 
     f2.Left = this.Left; 
     f2.Top = this.Top; 
     f2.Size = this.Size; 
     f2.Show(); 

但它仍然有問題。 form2我們不完全在form1上。我應該添加到代碼中的任何其他事情?

+0

它是如何顯示的?它是否稍微偏離右邊和底部?你也有窗口控件顯示在窗體上嗎? – Loktar 2011-01-05 19:07:50

+0

不完全?它是關閉了很多還是幾個像素? – kd7 2011-01-05 19:07:56

+0

是的,它已關閉到右側和底部 – Bohn 2011-01-05 19:09:28

回答

0

如果你不想,直到窗體2關閉用戶與Form1中互動,那麼你的最後一行改爲

f2.ShowDialog(); 

然後,如果用戶仍然可以看到Form1中也沒關係。在Form2關閉之前,Windows不會讓Form1重新獲得焦點。

+0

謝謝,但沒有這不是目的。 – Bohn 2011-01-05 19:11:01

1

當Form1顯示與Form1具有相同大小和相同位置的Form2時會發生什麼? Form1將隱身嗎?那麼,爲什麼你不使用form1.Hide();

+0

對於我來說,form1實際上並不重要...重要的是,我希望Form2與Form1具有相同大小的相同位置,當然這會導致form1變得無形,是的。但這不是目標... – Bohn 2011-01-05 19:16:45

+1

所以,我可以說給form1和form2的尺寸相同,然後設置兩個中心的起始位置:) – 2011-01-05 19:18:18

+0

@ Serkan:好的呼叫...但不要設置它中央...實際上,我將Form2的StartPosition設置爲「手動」,然後工作正常。 – Bohn 2011-01-05 19:55:30

1

是的,你這樣做是錯誤的。如果您運行此機器的機器具有相同的用戶首選項,系統字體大小和視頻DPI設置,則表單的實際大小隻與設計大小相同。如果它關閉很多,則DPI設置不同。如果關閉一點,那麼用戶的喜好就不同了。就像一個更大的標題欄字體或更大的按鈕。修復:

Form2 f2 = new Form2(); 
    f2.Show(); 
    f2.Left = this.Left; 
    f2.Top = this.Top; 
    f2.Size = this.Size; 

如果這太明顯,那麼你應該讓Form2的Load事件做到這一點。傳遞對主窗體的引用或使用Owner屬性和Show(所有者)。換句話說:

Form2 f2 = new Form2(); 
    f2.Show(this); 

在窗體2:

protected override void OnLoad(EventArgs e) { 
     base.OnLoad(e); 
     this.Location = Owner.Location; 
     this.Size = Owner.Size; 
    } 
0

試試這個...

Form2 f2 = new Form2(); 
f2.Show(); 
f2.SetBounds(this.Location.X, this.Location.Y,this.Width, this.Height); 
//this.Hide();  // if you want to hide 1stform after showing 2nd form 
0

在爲窗口2表單屬性,將其設置爲 「中心父」

如果表單的大小相同,則這會將form2放在form1上,而表單1不可用。仍然使用模式(form2.ShowDialog())打開表單,所以即使用戶手動移動表單2,焦點仍然保留在form2中。

你仍然可以像我剛纔提到的那樣移動form2,但這並沒有被指定爲這個問題的一部分。

相關問題