首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么PictureBox在表单中定位后不出现?

为什么PictureBox在表单中定位后不出现?
EN

Stack Overflow用户
提问于 2015-10-12 09:25:31
回答 1查看 34关注 0票数 1

我有一个类fish,我只想用8种类型的fish在表单中定位它来初始化我的表单。当我运行我的代码时,这八条鱼永远不会出现。在某些情况下是一、二或三。但是,当我调试代码时,出现了八条鱼。

我真的不知道发生了什么。希望你能帮我找到答案。

代码语言:javascript
复制
class Fish : Aquaticanimal   
{
    private int x;

    public int X
    {
        get { return x; }
        set { x = value; }
    }

    private int y;

    public int Y
    {
        get { return y; }
        set { y = value; }
    }

    public Fish(Bitmap fish,Form form)
    {
        quantity++;
        aquaticAnimal.BackColor = Color.Transparent;
        aquaticAnimal.Image = fish;
        aquaticAnimal.SizeMode = PictureBoxSizeMode.StretchImage;
        positioning(form);
    }

    private void positioning(Form form)
    {
        Random rnd = new Random();
        int FormWidth= Convert.ToInt32( form.Size.Width.ToString());
        int FormHeight = Convert.ToInt32(form.Size.Height.ToString());
        aquaticAnimal.Parent=form;
        aquaticAnimal.Top = rnd.Next(200, FormHeight - 100);
        aquaticAnimal.Left = rnd.Next(0, FormWidth - 100);
        this.x = aquaticAnimal.Top;
        this.y = aquaticAnimal.Left;
    }
}
代码语言:javascript
复制
private void Form1_Load(object sender, EventArgs e)
{
    Bitmap[] images = new Bitmap[8];
    images[0] = Pecera.Properties.Resources.Nemo;
    images[1] = Pecera.Properties.Resources.Pez_hembra;
    images[2] = Pecera.Properties.Resources.Pez_macho;
    images[3] = Pecera.Properties.Resources.tiburon_adulto;
    images[4] = Pecera.Properties.Resources.Tiburon_bebe_hembra;
    images[5] = Pecera.Properties.Resources.tiburon_macho;
    images[6] = Pecera.Properties.Resources.Dorys;
    images[7] = Pecera.Properties.Resources.tiburon_hembra;

    Fish[] fish = new Fish[8];
    for (int x = 0; x < 8; x++)
    {
        fish[x] = new Fish(images[x], this);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-10-12 09:30:12

这是以极快的速度创建Random的新实例,从而产生不太随机的值的情况。你的鱼都是相互重叠的,因为“随机”值是相同的。

您必须以这样一种方式重构您的代码,即只使用Random的一个实例。

这是我的建议,尽可能少地修改代码:

代码语言:javascript
复制
class Fish : Aquaticanimal
{
    ...
    ...

    private static Random rnd = new Random();

    private void positioning(Form form)
    {
        int FormWidth= Convert.ToInt32( form.Size.Width.ToString());
        int FormHeight = Convert.ToInt32(form.Size.Height.ToString());
        aquaticAnimal.Parent=form;
        aquaticAnimal.Top = rnd.Next(200, FormHeight - 100);
        aquaticAnimal.Left = rnd.Next(0, FormWidth - 100);
        this.x = aquaticAnimal.Top;
        this.y = aquaticAnimal.Left;
    }
}

顺便说一句,你的Fish类真的不应该负责在表单上定位自己。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33071944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档