小歐ou | 菜鳥自救會

努力工作,用心學習
文章數 - 1038, 回應數 - 1008, 引用數 - 0

每月文章

技術社群

技術部落格

關於我

[C#]表單放大或縮小後,控制項跟著表單比例放大

有時候會希望表單放大或縮小後,控制項跟著表單比例放大

在Visual Studio 2005後,可以透過Control.Anchor 屬性做設定(感謝regionbbs與larrynung 指教)

Control.Anchor 屬性

取得或設定控制項繫結至的容器邊緣,並決定控制項隨其父代重新調整大小的方式。

命名空間: System.Windows.Forms
組件: System.Windows.Forms (在 system.windows.forms.dll 中)

 http://msdn.microsoft.com/zh-tw/library/system.windows.forms.control.anchor(VS.80).aspx

 

而假如想要透過寫程式的方式計算比例大小的話,可以分成以下的步驟

Step1.紀錄Form本來的大小(長與寬)
Step2.Form.Resize事件觸發時用目前大小與之前大小計算長寬縮放比例
     (目前大小/本來大小)(需注意大小為0的狀況)
Step3.把控制項大小*長寬縮放比例
Step4.把Form本來大小值設為目前大小值

以下為程式碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;


namespace FormResize
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        double oldWidth;
        double oldHeight;

        private void Form1_Load(object sender, EventArgs e)
        {
            // Step1.紀錄Form本來的大小(長與寬)
            oldWidth = this.Width;
            oldHeight = this.Height;
        }


        private void Form1_Resize(object sender, EventArgs e)
        {
            // Step2.計算比例
            double x = (this.Width / oldWidth);
            double y = (this.Height / oldHeight);

            // Step3.控制項 Resize
            button1.Width = Convert.ToInt32(x * button1.Width);
            button1.Height = Convert.ToInt32(y * button1.Height);
            button2.Width = Convert.ToInt32(x * button2.Width);
            button2.Height = Convert.ToInt32(y * button2.Height);
            textBox1.Width = Convert.ToInt32(x * textBox1.Width);
            textBox1.Height = Convert.ToInt32(y * textBox1.Height);
            textBox2.Width = Convert.ToInt32(x * textBox2.Width);
            textBox2.Height = Convert.ToInt32(y * textBox2.Height);

            // Step4.把Form本來大小值設為目前大小值
            oldWidth = this.Width;
            oldHeight = this.Height;
        }



    }

}

執行結果

原始Form

放大Form

縮小Form

 

參考
http://www.programmer-club.com/pc2020v5/Forum/ShowSameTitleN.asp?URL=N&board_pc2020=vbdotnet&index=4&id=14009&mode=&type_pc2020=sametitleLevel-2=

http://www.blueshop.com.tw/board/show.asp?subcde=BRD200902190134363RD&fumcde

 

 




posted on 2009/2/19 09:11 我要推薦 | 閱讀數 : 35905 訂閱

關連文章

Feedback

# re: [C#]表單放大或縮小後,控制項跟著表單比例放大 回覆

Visual Studio 2005 開始,在 Windows Forms 中多了一個叫做 Anchor 的屬性,這個屬性就已經可以自動達到控制項跟隨容器控制項(Panel, Form 這些)縮放的能力了 ...

2009/2/19 上午 10:19 | regionbbs

# re: [C#]表單放大或縮小後,控制項跟著表單比例放大 回覆

To regionbbs

感謝您的指教,我在試試看,不知道這麼屬性能否用在動態產生的按鈕上

2009/2/19 上午 10:50 | chou

# re: [C#]表單放大或縮小後,控制項跟著表單比例放大 回覆

能啊~ 討論區那我也有提到有這個屬性, 可是發問者的需求是用程式控制, 才會提出這個方法. 並不是只能用程式控制.
2009/2/19 上午 11:00 | larrynung

# re: [C#]表單放大或縮小後,控制項跟著表單比例放大 回覆

To larrynung 大大

看來直接設定屬性,容易太多了,感謝您的指教^^

2009/2/19 上午 11:05 | chou

# re: [C#]表單放大或縮小後,控制項跟著表單比例放大 回覆

可以請問一下嗎??

我用上述的方法套用在我的系統

都無法執行

說我的數值對int32而言太小

可是我調成int64或是uint都一樣

2014/11/10 上午 11:31 | 阿忠

回應

標題
姓名
電子郵件 (將不會被顯示)
個人網頁
內容 
  登入後使用進階評論  
Please add 8 and 7 and type the answer here:

Powered by: