none
當解析度不同時,控制項的大小與字型要如何隨解析度更變正確大小? RRS feed

  • 問題

  • 作業系統:Windows XP SP3
    開發平台:Visual Basic 2008

    問題內容:我有一個表單裡面有很多的按鈕、標籤等等,我設計的時候解析度是1440x900,
    但當我把解析度調為1024x768時,所有的控制項大小都縮水了一樣,位置都變窄了,導致文字換到下一行,
    排版也變得不好看,後來我在表單Load事件加入控制項Size與Location的初始設定,但是這樣字型還是沒辦法有正確的大小,
    主要是每多一個控制項就要加入Size與Location的設定,所以我想有辦法讓表單可以簡單隨著解析度做正確的大小變化嗎?
    2010年1月27日 上午 02:33

解答

  • :::設定物件的大小及位置
                    ctl.Height = ctl.Height * (My.Computer.Screen.Bounds.Height / 768)
                    ctl.Width = ctl.Width * (My.Computer.Screen.Bounds.Width / 1024)
                    ctl.Top = ctl.Top * (My.Computer.Screen.Bounds.Height / 768)
                    ctl.Left = ctl.Left * (My.Computer.Screen.Bounds.Width / 1024)
    記得用遞迴的方式來做,將每個物件的大小及位置做變更!!!
    • 已標示為解答 js155036 2010年1月27日 上午 04:15
    2010年1月27日 上午 02:40
  • :::應該是說假如你的表單裡有一些Contain(容器)型態的物件時(例如:GroupBox,Panel........),就必須要用到遞迴的方
    式來做,因為一開始你應該會將表單上全部的物件設定其大小及位置,若有容器型態的物件時,則必須設定容器裡全部的
    物件其大小及位置(類似層級的觀念),所以這種情況就必須用遞迴的方式來做,但假如你的表單上沒有容器型態的物件時,
    直接用For或For Each基本的迴圈來設定就可以了!!!
    • 已標示為解答 js155036 2010年1月27日 上午 04:15
    2010年1月27日 上午 03:11
  • Hi,

    可參考
    .NET Framework 類別庫
    Control.Scale 方法

    縮放控制項和任何的子控制項。


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 js155036 2010年1月27日 上午 04:15
    2010年1月27日 上午 03:23

所有回覆

  • :::設定物件的大小及位置
                    ctl.Height = ctl.Height * (My.Computer.Screen.Bounds.Height / 768)
                    ctl.Width = ctl.Width * (My.Computer.Screen.Bounds.Width / 1024)
                    ctl.Top = ctl.Top * (My.Computer.Screen.Bounds.Height / 768)
                    ctl.Left = ctl.Left * (My.Computer.Screen.Bounds.Width / 1024)
    記得用遞迴的方式來做,將每個物件的大小及位置做變更!!!
    • 已標示為解答 js155036 2010年1月27日 上午 04:15
    2010年1月27日 上午 02:40
  • 感謝小琳大大的回覆,

    前面說的我懂了,但是最後一句用"遞迴的方式來做",這句我不太懂,
    我知道的遞迴是一直呼叫自己(Function),直到有個判斷,停止再呼叫自己,
    並傳回最後的值,所以觀念上我轉不太過來,
    是否可以再解釋更清楚點Thanks。

    2010年1月27日 上午 02:58
  • :::應該是說假如你的表單裡有一些Contain(容器)型態的物件時(例如:GroupBox,Panel........),就必須要用到遞迴的方
    式來做,因為一開始你應該會將表單上全部的物件設定其大小及位置,若有容器型態的物件時,則必須設定容器裡全部的
    物件其大小及位置(類似層級的觀念),所以這種情況就必須用遞迴的方式來做,但假如你的表單上沒有容器型態的物件時,
    直接用For或For Each基本的迴圈來設定就可以了!!!
    • 已標示為解答 js155036 2010年1月27日 上午 04:15
    2010年1月27日 上午 03:11
  • Hi,

    可參考
    .NET Framework 類別庫
    Control.Scale 方法

    縮放控制項和任何的子控制項。


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 js155036 2010年1月27日 上午 04:15
    2010年1月27日 上午 03:23
  • 這個方法最讚:)

    只要將容器用這方法調整,其他的都會一起調整,
    所以只要先判斷解析度再調整大小就可以了,以下供其他遇到相同問題的網友參考。

    ex:
    TabPage1.Scale( New SizeF( 1.2F, 1.2F ))
    2010年1月27日 上午 05:37
  • 基本上我多半配合 TableLayoutPanel 來排版,類似 Web 中的 Table


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月27日 下午 05:06