none
picturebox隨form改變大小 RRS feed

  • 問題

  • 大大您们好,我想請問一下,我是利用副函式在我的表單上加入picturebox,也有畫布,但我想要表單變大,picturbox一起變動,所以我也有寫anchor的屬性,但是我發現當我表單放大後,我的picturebox的寬度高度還是會維持我一開始設定的值,不會變動,想請問大大,是因為我寫道副函式的關係嗎,謝謝
           Form WhichFormComIn = null;
           int BorderWidth = 0, BorderHeight = 0;
            public void StartSettingVar(object sender, int BorderWidth, int BorderHeight)
            {
                WhichFormComIn = (Form)sender;     
                this.BorderWidth = BorderWidth;
                this.BorderHeight = BorderHeight;    
            }
            public void AddPic(int PicLocX,int PicLocY)
            {
                pic = new PictureBox();
                pic.Size = new Size(BorderWidth, BorderHeight);
                pic.Anchor = AnchorStyles.Left;
                pic.Anchor = AnchorStyles.Top;
                pic.Anchor = AnchorStyles.Right;
                pic.Anchor = AnchorStyles.Bottom;
                pic.Location = new Point(PicLocX, PicLocY);
                WhichFormComIn.Controls.Add(pic);
            }
    //form改變大小時呼叫
            public void ChangeFormSize()
            {
                BorderWidth = pic.Width;
                BorderHeight = pic.Height;

             }
    2009年4月15日 上午 10:04

解答

  •         PictureBox pic;
            Form WhichFormComIn = null;
            int BorderWidth = 0, BorderHeight = 0;
            public void StartSettingVar(object sender, int BorderWidth, int BorderHeight)
            {
                WhichFormComIn = (Form)sender;
                this.BorderWidth = BorderWidth;
                this.BorderHeight = BorderHeight;
            }
            public void AddPic(int PicLocX, int PicLocY)
            {
                pic = new PictureBox();
                pic.BorderStyle = BorderStyle.FixedSingle;
                pic.Size = new Size(BorderWidth, BorderHeight);
                pic.Anchor = AnchorStyles.Left | AnchorStyles.Top|AnchorStyles.Right| AnchorStyles.Bottom;
                pic.Location = new Point(PicLocX, PicLocY);
                WhichFormComIn.Controls.Add(pic);
            }
            //form改變大小時呼叫
            public void ChangeFormSize()
            {
                BorderWidth = pic.Width;
                BorderHeight = pic.Height;
            }

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2009年4月16日 上午 01:33
    2009年4月16日 上午 01:30

所有回覆

  • 小綠兒:
             應該是事先記錄原來大小,在變動後依據變動比例改變,以下為一個簡單的例子
             public partial class Form1 : Form
        {
            int ix, iy, iWidth, iHeight, ifWidth, ifHeight;
            public Form1()
            {
                InitializeComponent();
            }
                 
            private void Form1_Load(object sender, EventArgs e)
            {
                  ifWidth = this.Width;
            ifHeight = this.Height;
            ix = pictureBox1.Location.X;
            iy = pictureBox1.Location.Y;
            iWidth = pictureBox1.Width;
            iHeight = pictureBox1.Height;
            }

            private void Form1_SizeChanged(object sender, EventArgs e)
            {
                  pictureBox1.Width = (this.Width / ifWidth) * iWidth;
            pictureBox1.Height = (this.Height / ifHeight) * iHeight;
            ifWidth = this.Width;
            ifHeight = this.Height;
            iWidth = pictureBox1.Width;
            iHeight = pictureBox1.Height;
            }
        }

    2009年4月15日 上午 10:37
    版主
  • 你表單大小改變後
    有用BorderWidth去設定Pic.Width?

    或是PictureBox有放在其他容器內嗎?!

    http://www.dotblogs.com.tw/larrynung/
    2009年4月15日 上午 10:51
  • PictureBox.Dock 設為 Fill
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年4月15日 下午 12:43
  • 大大您好,一開始呼叫StartSettingVar(),會先將pic大小設給他,接下來若是form改變大小的時候,會呼叫ChangeFormSize()
    ,這時會將畫布的大小改成pic後來變更的大小(即borderwidth和borderheight),如果依開始設定和表單同動作,那picturebox的大小應該會自動改變不是嗎,謝謝
    2009年4月16日 上午 12:58
  • 將pic大小設給他?!
    這樣看來Form的大小就跟Pic大小一樣了
    那用心冷大提的Dock就可以了

    http://www.dotblogs.com.tw/larrynung/
    2009年4月16日 上午 01:01
  • 大大您好,我所謂設給他,是ㄧ開始我會先設定我要pic的大小,並非將form大小給他,謝謝
    2009年4月16日 上午 01:02
  •  public void StartSettingVar(object sender, int BorderWidth, int BorderHeight)
            {
                WhichFormComIn = (Form)sender;     
                this.BorderWidth = BorderWidth;
                this.BorderHeight = BorderHeight;    
            }
    依妳的Code看來
    傳進的是Pic大小
    this應該是Form的物件參考
    設完應該是改Form大小
    因此看起來Form大小應該會變得跟Pic大小一樣

    http://www.dotblogs.com.tw/larrynung/
    2009年4月16日 上午 01:05
  • 大大您好,我這些都是在副函式的,所以我的this只是要跟程式說,我是在副函式的BorderWidth和BorderHeight這兩個變數會等於我傳進來的值,這樣觀念不對嗎,謝謝
    2009年4月16日 上午 01:08
  • 歐 原來是該類別的成員
    我以為是Form的Width與Heigh成員
    看錯

    http://www.dotblogs.com.tw/larrynung/
    2009年4月16日 上午 01:09
  • 抱歉,是我沒說清楚,謝謝大大,是不是因為副函式的關係和程式寫錯關係,因為我如果把加圖片的方式,放在和表單一起,就不會有這個問題,寫成副函式,我圖片位置會因為表單大小改變,近而改變圖片的位置,可是我的位置一開始就是設死的,麻煩各位大大替我解惑,謝謝
    2009年4月16日 上午 01:11
  •         PictureBox pic;
            Form WhichFormComIn = null;
            int BorderWidth = 0, BorderHeight = 0;
            public void StartSettingVar(object sender, int BorderWidth, int BorderHeight)
            {
                WhichFormComIn = (Form)sender;
                this.BorderWidth = BorderWidth;
                this.BorderHeight = BorderHeight;
            }
            public void AddPic(int PicLocX, int PicLocY)
            {
                pic = new PictureBox();
                pic.BorderStyle = BorderStyle.FixedSingle;
                pic.Size = new Size(BorderWidth, BorderHeight);
                pic.Anchor = AnchorStyles.Left | AnchorStyles.Top|AnchorStyles.Right| AnchorStyles.Bottom;
                pic.Location = new Point(PicLocX, PicLocY);
                WhichFormComIn.Controls.Add(pic);
            }
            //form改變大小時呼叫
            public void ChangeFormSize()
            {
                BorderWidth = pic.Width;
                BorderHeight = pic.Height;
            }

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2009年4月16日 上午 01:33
    2009年4月16日 上午 01:30
  • 大大謝謝您,可以了耶,可是為什麼要寫成這種寫法壓,謝謝
    2009年4月16日 上午 01:33
  • 因為那四個Anchor都要設
    要同時上下左右都設上
    Anchor是Flag型態的列舉值
    假設上下左右分別列舉值是1,2,4,8
    Or起來就變成15
    它就會知道是上下左右都要Anchor
    妳之前的寫法只會設成Bottom


    http://www.dotblogs.com.tw/larrynung/
    2009年4月16日 上午 01:36
  • 感謝大大解答,謝謝
    2009年4月16日 上午 01:38
  • 一般來說,我會用 TableLayoutPanel 來保留我周圍要的寬度或比例,中間放的 PictureBox.Dock 還是用 Fill 來處理,這樣縮放完全不用寫程式碼。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年4月16日 上午 07:08
  • 大大謝謝您的方法,我會學起來的
    2009年4月16日 上午 07:55