C#运行和设计时的控件发生变化

img

img


设计和运行控件发生了很大变化
picturebox的位置与原来不符
请求大家的帮助!
我个人感觉是背景图的问题,导致没有把其他控件显示完全。

img

img

这个需要看你的代码,你的那个图片属性如何定义的


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Whack_a_Mole
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            x = this.Width;
            y = this.Height;
            setTag(this);
        }

        #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)
            {
                //获取控件的Tag属性值,并分割后存储字符串数组
                if (con.Tag != null)
                {
                    string[] mytag = con.Tag.ToString().Split(new char[] { ';' });
                    //根据窗体缩放的比例确定控件的值
                    con.Width = Convert.ToInt32(System.Convert.ToSingle(mytag[0]) * newx);//宽度
                    con.Height = Convert.ToInt32(System.Convert.ToSingle(mytag[1]) * newy);//高度
                    con.Left = Convert.ToInt32(System.Convert.ToSingle(mytag[2]) * newx);//左边距
                    con.Top = Convert.ToInt32(System.Convert.ToSingle(mytag[3]) * newy);//顶边距
                    Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字体大小
                    con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
                    if (con.Controls.Count > 0)
                    {
                        setControls(newx, newy, con);
                    }
                }
            }
        }
        
        int count;//表示得分
        int time;//表示时间
        private void button1_Click(object sender, EventArgs e)
        {
            button1.Visible = false;
            timer1.Enabled = true;
            timer2.Enabled = true;
            label1.Text = "游戏时间:30";
            label3.Text = "游戏得分:0";
            count = 0;
            time = 30;
        }
        int num = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            Random rd = new Random();
            int num = rd.Next(0, 9);
            switch (num)
            {
                case 0:
                    invisiable();
                    pictureBox1.Visible = true;
                    break;
                case 1:
                    invisiable();
                    pictureBox2.Visible = true;
                    break;
                case 2:
                    invisiable();
                    pictureBox3.Visible = true;
                    break;
                case 3:
                    invisiable();
                    pictureBox4.Visible = true;
                    break;
                case 4:
                    invisiable();
                    pictureBox5.Visible = true;
                    break;
                case 5:
                    invisiable();
                    pictureBox6.Visible = true;
                    break;
                case 6:
                    invisiable();
                    pictureBox7.Visible = true;
                    break;
                case 7:
                    invisiable();
                    pictureBox8.Visible = true;
                    break;
                case 8:
                    invisiable();
                    pictureBox9.Visible = true;
                    break;
            }
        }
            int flag = 0;
            private void invisiable()//写一个能隐藏地鼠的函数
            {
                pictureBox1.Visible = false;
                pictureBox2.Visible = false;
                pictureBox3.Visible = false;
                pictureBox4.Visible = false;
                pictureBox5.Visible = false;
                pictureBox6.Visible = false;
                pictureBox7.Visible = false;
                pictureBox8.Visible = false;
                pictureBox9.Visible = false;
                pictureBox1.Image = imageList1.Images[0];
                pictureBox2.Image = imageList1.Images[0];
                pictureBox3.Image = imageList1.Images[0];
                pictureBox4.Image = imageList1.Images[0];
                pictureBox5.Image = imageList1.Images[0];
                pictureBox6.Image = imageList1.Images[0];
                pictureBox7.Image = imageList1.Images[0];
                pictureBox8.Image = imageList1.Images[0];
                pictureBox9.Image = imageList1.Images[0];
                flag = 0;
        }

            private void pictureBox1_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer2.Ctlcontrols.play();
                PictureBox pb = (PictureBox)sender;//sender:在事件中获得引发事件的控件,在这里指的是Picturebox
                pb.Image = imageList1.Images[1];
                if (flag == 0)
                {
                    flag = 1;
                    count++;
                    label3.Text = "游戏得分: " + count;
                }
            }

            private void pictureBox2_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer2.Ctlcontrols.play();
                PictureBox pb = (PictureBox)sender;
                pb.Image = imageList1.Images[1];
                if (flag == 0)
                {
                    flag = 1;
                    count++;
                    label3.Text = "游戏得分: " + count;
                }
            }

            private void pictureBox3_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer2.Ctlcontrols.play();
                PictureBox pb = (PictureBox)sender;
                pb.Image = imageList1.Images[1];
                if (flag == 0)
                {
                    flag = 1;
                    count++;
                    label3.Text = "游戏得分: " + count;
                }
            }

            private void pictureBox4_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer2.Ctlcontrols.play();
                PictureBox pb = (PictureBox)sender;
                pb.Image = imageList1.Images[1];
                if (flag == 0)
                {
                    flag = 1;
                    count++;
                    label3.Text = "游戏得分: " + count;
                }
            }

            private void pictureBox5_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer2.Ctlcontrols.play();
                PictureBox pb = (PictureBox)sender;
                pb.Image = imageList1.Images[1];
                if (flag == 0)
                {
                    flag = 1;
                    count++;
                    label3.Text = "游戏得分: " + count;
                }
            }

            private void pictureBox6_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer2.Ctlcontrols.play();
                PictureBox pb = (PictureBox)sender;
                pb.Image = imageList1.Images[1];
                if (flag == 0)
                {
                    flag = 1;
                    count++;
                    label3.Text = "游戏得分: " + count;
                }
            }

            private void pictureBox7_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer2.Ctlcontrols.play();
                PictureBox pb = (PictureBox)sender;
                pb.Image = imageList1.Images[1];
                if (flag == 0)
                {
                    flag = 1;
                    count++;
                    label3.Text = "游戏得分: " + count;
                }
            }

            private void pictureBox8_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer2.Ctlcontrols.play();
                PictureBox pb = (PictureBox)sender;
                pb.Image = imageList1.Images[1];
                if (flag == 0)
                {
                    flag = 1;
                    count++;
                    label3.Text = "游戏得分: " + count;
                }
            }

            private void pictureBox9_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer2.Ctlcontrols.play();
                PictureBox pb = (PictureBox)sender;
                pb.Image = imageList1.Images[1];
                if (flag == 0)
                {
                    flag = 1;
                    count++;
                    label3.Text = "游戏得分: " + count;
                }
            }

            private void timer2_Tick(object sender, EventArgs e)
            {
                if (time == 0)
                {
                    timer1.Enabled = false;
                    invisiable();
                    label1.Text = "游戏结束";
                    button1.Visible = true;
                    button1.Text = "再来一次";
                }
                else
                {
                    time--;
                    label1.Text = "游戏时间: " + time;
                }
            }

            private void 退出游戏ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Close();
            }

            private void 简单ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                timer1.Interval = 1200;
                timer2.Interval = 2400;
            }

            private void 困难ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                timer1.Interval = 1000;
                timer2.Interval = 2000;
            }

            private void 地狱ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                timer1.Interval = 800;
                timer2.Interval = 1600;
            }

            private void 开启ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }

            private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                axWindowsMediaPlayer1.Ctlcontrols.stop();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                axWindowsMediaPlayer1.Ctlcontrols.play();
                axWindowsMediaPlayer1.settings.setMode("loop", true);
                axWindowsMediaPlayer2.Ctlcontrols.stop();
            }

            private void Form1_Resize(object sender, EventArgs e)
            {
                float newx = (this.Width) / x;
                float newy = (this.Height) / y;
                setControls(newx, newy, this);
            }

           
    }
}
        #endregion