public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
        }        /// <summary>
        /// 0:界面1;1:界面2;2:界面3;
        /// </summary>
        private int _UIFlag = 0;
        /// <summary>
        /// 刷新界面控件
        /// </summary>
        private void RefreshUI()
        {
            if (_UIFlag == 0)
            {
                btn_Enter.Visible = true;
                btn_Office.Visible = false;
                btn_Name.Visible = false;
                btn_Num.Visible = false;
            }
            else if (_UIFlag == 1)
            {
                btn_Enter.Visible = false;
                btn_Office.Visible = true;
                btn_Name.Visible = true;
                btn_Num.Visible = true;
            }        
        }        /// <summary>
        /// 刷新界面控件大小和位置
        /// </summary>
        private void RefreshUIPosition()
        { //界面缩放后,button的位置和大小随之改变
        
        }        private void btn_Enter_Click(object sender, EventArgs e)
        {
            this.BackgroundImage = System.Drawing.Image.FromFile(@"F:\image\版面-02.jpg");
            _UIFlag = 1;
            RefreshUI();
        }
        private void Form4_ClientSizeChanged(object sender, EventArgs e)
        {
            RefreshUIPosition();
        }
求大神,这是部分代码。。主要想实现改变了背景大小后,怎么使背景上的button按钮也会改变大小

解决方案 »

  1.   

    直接使用DockStyle好了。若在中间,通过panel控制位置
      

  2.   

    public void AutoScales(Form frm)
            {
                frm.Tag = frm.Width.ToString() + "," + frm.Height.ToString();
                frm.SizeChanged += new EventHandler(frmScreen_SizeChanged);        }
            private void frmScreen_SizeChanged(object sender, EventArgs e)
            {
                if (flage == 1)
                {
                    flage++;
                    string[] tmp = ((Form)sender).Tag.ToString().Split(',');
                    float width = (float)((Form)sender).Width / (float)Convert.ToInt16(tmp[0]);
                    float heigth = (float)((Form)sender).Height / (float)Convert.ToInt16(tmp[1]);
                    ((Form)sender).Tag = ((Form)sender).Width.ToString() + "," + ((Form)sender).Height;
                    foreach (Control control in ((Form)sender).Controls)
                    {
                        control.Scale(new SizeF(width, heigth));
                    }
                }
            }
      

  3.   

    窗体大小改变,在窗体里的任意位置的button随之改变大小和位置。
    如原先窗体大小为:640,400.
    button位置为100,100;Width:100;Height:100.窗体大小改变为1280,800后,button该如何改变?求代码以上只是简单举例,实际BUTTON有20多个。所以不能够用Anchor来改变左右位置。。
      

  4.   

    有个笨办法,可以判断改变后的窗口和原来窗口的比例,然后对所有button的location和size进行一次等比放大或者缩小,这样效率可能不高吧,期待高手的解答
      

  5.   

    代码来了,亲测可行 private void Form1_SizeChanged(object sender, EventArgs e)
            {
                float x = this.Width / oldsize.Width; //oldsize为窗口原来大小
                float y = this.Height / oldsize.Height;
                foreach (Control ctr in this.Controls)
                {
                    if (ctr.GetType() == typeof(Button))
                    {
                        ctr.Left = (int)(ctr.Location.X * x);
                        ctr.Top = (int)(ctr.Location.Y * y);
                        ctr.Width = (int)(ctr.Width * x);
                        ctr.Height = (int)(ctr.Height * y);
                    }
                    oldsize = this.Size;
                }
            }
      

  6.   

    拖一个TabelLayout控件,把按钮都放到TableLayout控件中,然后均设置为Dock.Fill
      

  7.   

    这个控件试了,如果把TabelLayout也设置为Dock:Fill时,button位置直接移到最顶角了。我把button的设置为dock:fill。他就显示居中,不在那个按钮原先的位置上了。。
      

  8.   

    我试了你这个代码,newsize.width和oldsize.width数据都有了,而且数据不一样,但是float x 显示为0.0。。
      

  9.   

    一群没玩过WPF的人只想着套用winform
    都没研究下xaml,
    将简单的功能复杂化,
    你只需要将button放在一个容器里如DockPanel,
    再设置一下DockPanel的Transform,
    用放大镜ScaleTransform缩放即可
    我从我的代码中复制了一段用Slider 控制TabControl缩放的片段:<Slider x:Name="uiScaleSlider" 
                     Grid.Column="1"                
                     SmallChange="0.1"
                     LargeChange="1"
                     Minimum="1" 
                     Maximum="10"
                     Value="2" 
                     Margin="5"/>
    <TabControl.LayoutTransform>           
                <ScaleTransform CenterX="0" 
                             CenterY="0"
                             ScaleX="{Binding ElementName=uiScaleSlider,Path=Value}"
                             ScaleY="{Binding ElementName=uiScaleSlider,Path=Value}"/>
             </TabControl.LayoutTransform>