none
有關MDI表單的出現位置 RRS feed

  • 問題

  • 開發環境:Visual Basic 2005
    作業系統:Windows XP

    1.
    我寫了
    一個MDI表單:MDIMain
    一個Form:Form1
    Form1.MDIParent = MDIMain

    現在我想要將Form1 Show出來時他的位置設定為MDIMain的中間

    我將Form1的StartPosition設為CenterParent

    但是他Show時並沒有在MDIMain的中間,而是在左上角

    為什麼會這樣?如果我想要讓他Show在正中間要怎麼寫?

    2.
    如果Form2也是MDIMain的一個MDIChildren,如果 Form1 呼叫Form2時想要Form2在Form1中間,這樣要怎麼寫?

    謝謝!

     

    2006年10月5日 上午 07:29

解答

  • 應該是

    New Point((Me.ClientRectangle.Width / 2) - (f.Width / 2),(Me.ClientRectangle.Height / 2) - (f.Height / 2))

    我Key錯了

    既然是設定成手動設定開始位置,所以設定那個Location,就是要指定你的Form的左上角要在哪邊...

    2006年10月5日 下午 01:48

所有回覆

  • MDI一般來說比SDI的限制多,但是這個Case我還是覺得是Bug,畢竟MSDN是這樣說的:

    You can also position the form to display in the center of the screen or in the center of its parent form for forms such as multiple-document interface (MDI) child forms

    而且FeedbackCenter 也有相關的討論:

    https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=116937

    不過你還是有解決的方法:

    --------------------------------------------------------------------------

    Dim f As New Form1

    f.MdiParent = Me

    f.StartPosition = FormStartPosition.Manual

    f.Location = New Point((Me.ClientRectangle.Width / 2) - (f.Width / 2), Me.Height - (Me.ClientRectangle.Height / 2) - (f.Height / 2))

    f.Show()

    --------------------------------------------------------------------------

    Dim f As New Form2

    f.MdiParent = Me.MdiParent

    f.StartPosition = FormStartPosition.Manual

    f.Location = New Point(Me.Left + (Me.Width / 2) - (f.Width / 2), Me.Top + (Me.Height / 2) - (f.Height / 2))

    f.Show()

    2006年10月5日 上午 08:36
  • 謝謝啊!

    只是這一行
    f.Location = New Point((Me.ClientRectangle.Width / 2) - (f.Width / 2), Me.Height - (Me.ClientRectangle.Height / 2) - (f.Height / 2))

    好像有點問題耶....
    跑出來的太偏下了

    我如果這樣寫:

    f.Location = New Point((Me.ClientRectangle.Width / 2) - (f.Width / 2), Me.Height / 2 - (Me.Height - Me.ClientRectangle.Height) - (f.Height / 2))

    會有問題嗎?

    2006年10月5日 上午 09:37
  • 應該是

    New Point((Me.ClientRectangle.Width / 2) - (f.Width / 2),(Me.ClientRectangle.Height / 2) - (f.Height / 2))

    我Key錯了

    既然是設定成手動設定開始位置,所以設定那個Location,就是要指定你的Form的左上角要在哪邊...

    2006年10月5日 下午 01:48
  • 謝謝!
    2006年10月5日 下午 02:53