让另一个类控制主窗体上的图片[]

时间:2017-07-07 14:02:01

标签: c# winforms class

我尝试为赛车创建一个类“bgcar”,负责处理与某些赛车相关的所有变量,其中一个变量是赛车的图片,放在主表格上。所有变量加速位置位置汽油等工作(但我从下面删除)。

但是,加载和更新图像会产生问题。 我在下面的代码中尝试了一些变体,但到目前为止没有任何作用。

我可以想象有人会想为什么不要简单地在Main表单中写出来,但是我不想创建大量的表单变量,我希望一个类能够自己处理它并使用classtype.update() 。更新主表单。 这是一个winform应用程序。

namespace game
{ 
public class Main:Form
  {
    bgcar racecars;

    public Main()
    {
      racecars = new bgcar();
      racecars.update

      //to add later
      //traficlights.update
      //people.update
    }
  }
class bgcar
{
  public PictureBox[] wagon;
  public bgcar() //constructor
  {
    wagon = new PictureBox[2];

    //below wont work.
    //while on the main form 
    // picturebox1.image new bitmap(game.Properties.Resources.SportwagonA)
    //works, proving it does exist in the resource file.
    wagon[0].image = new Bitmap(game.Properties.Resources.SportwagonA);
    wagon[1].image = new Bitmap(game.Properties.Resources.SportwagonB);
  }
  public void update()
  {
    //displaying those images is also a problem
    Random rnd = new Random();
    int x = rnd.next(100);
    int y = rnd.next(100);
    Wagon[0].location = new point (x,y);

    int x = rnd.next(100);
    int y = rnd.next(100);
    Wagon[1].location = new point (x,y);
  }
 }
}

==更新 先去吃饭,我现在想在我的Main:form上创建 一个public PictureBox[] sportcars,然后在我的mainform中有一个例程 做的事情:sportscar = bgcar.wagon;不确定这是否有效。

3 个答案:

答案 0 :(得分:1)

表单传递到您的班级,以便您可以添加控件:

adb shell pm list packages com.your.domain \
| cut -d ':' -f 2 \
| tr -d '\r' \
| xargs -L1 -t adb uninstall

这是Class的更新版本:

public Main()
{
  racecars = new bgcar(this); // <--- Pass the Form in
  racecars.update();
}

答案 1 :(得分:0)

将您的picturebox array定义为static

 public static PictureBox[] wagon;

然后您可以使用其他类(如

)中的类名来访问它
public class Main:Form  
{

  public Main()
  {
     bgcar.wagoon // and something happens
  }
}

这就是我所看到的 enter image description here

答案 2 :(得分:0)

所以你的racecars课程在你使用它的方式上基本没用。每次创建一个新的PictureBox实例都不会给你任何东西。你必须将它们添加到窗体(或其他父控件)中,它们将在里面绘制它们。

racecars = new bgcar();
racecars.update();
foreach(PictureBox pBox in racecars.wagon)
{
    this.Controls.Add(pBox);
}