您的位置:首页 > 编程语言 > C#

C#窗体控件大小随窗体变化而变化的一种改进方法

2017-07-06 09:59 555 查看
窗体控件包含comboBox控件,comboBox大小随窗体大小改变后,comboBox框内当前文本为选定状态,蓝色,看着很不舒服。      在点击打开链接基础上,添加comboBox控件判断,如下:

 #region  窗体控件大小随窗体改变而改变

        private float X;

        private float Y;

        private void setTag(Control cons)

        {

            foreach (Control con in cons.Controls)

            { 

                con.Tag=con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;

                if (con.Controls.Count > 0)

                    setTag(con);

            }

        }

        private void setControls(float newx, float newy, Control cons)

        { 

            foreach(Control con in cons.Controls)

            {

                string[] mytag = con.Tag.ToString().Split(new char[]{':'});

                float a = Convert.ToSingle(mytag[0])*newx;

                con.Width = (int)a;

                a = Convert.ToSingle(mytag[1]) * newy;

                con.Height = (int)a;

                a = Convert.ToSingle(mytag[2]) * newx;

                con.Left = (int)a;

                a = Convert.ToSingle(mytag[3]) * newy;

                con.Top = (int)a;

                Single currentSize = Convert.ToSingle(mytag[4])*Math.Min(newx,newy);

                con.Font = new Font(con.Font.Name, currentSize, con.Font.Style,con.Font.Unit);

                if ("System.Windows.Forms.ComboBox" == con.GetType().ToString())

                  {

                      ComboBox combo = (System.Windows.Forms.ComboBox)con;

                      //combo.Focus();

                      combo.SelectionStart = combo.SelectedText.Length;

                                                            

                  }


                if(con.Controls.Count>0)

                {

                    setControls(newx, newy,con);

                    

                }

            }

        }

        void Form1_Resize(object sender, EventArgs e)

        { 

           float newx=(this.Width)/X;

           float newy=(this.Height)/Y;

           setControls(newx,newy,this);

           //this.Text = this.Width.ToString() + " " + this.Height.ToString();
        }

       #endregion

在Form1_Load里添加

 this.Resize +=new EventHandler(Form1_Resize);

            X = this.Width;

            Y = this.Height;

            setTag(this);

           // Form1_Resize(new object(),new EventArgs());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: