Windows формы, доступ к картинке из класса в основной форме - PullRequest
1 голос
/ 19 марта 2020

Я создаю игру, в которой я хочу, чтобы вещи падали, и игрок должен попытаться поймать это.

В настоящее время мои падающие предметы вытягиваются и делаются в классе, отделенном от основного. формы, поэтому, когда я пытаюсь получить к ним доступ из основной формы, где я контролирую гравитацию. Я не могу найти изображение в поле (picCoin).

Не могли бы вы взглянуть на мой код и найти какое-нибудь решение?

Это класс, в котором я создаю монеты

class Coin
{

    private PictureBox picCoin = new PictureBox();
    public Coin()
    {
        picCoin.BackColor = Color.Transparent;
        picCoin.ImageLocation = @"C:\Users\sebfre1104\source\repos\SPEL\SPEL\Resources\hamburger.png";
        picCoin.Width = 100;
        picCoin.Height = 100;
        picCoin.SizeMode = PictureBoxSizeMode.StretchImage;     
    }
    public void DrawTo(Form f)
    {
        f.Controls.Add(picCoin);
    }
    public Rectangle getBounds()
    {
        return picCoin.Bounds;   
    }
    public void setposition(int x, int y)
    {        
        picCoin.Location = new Point(x, y);
    }

}

я хочу достичь этого picCoin в моей основной форме, чтобы я мог добавить гравитацию в приватной пустоте TimerGravitation_Tick (отправитель объекта, EventArgs e)

public partial class Form1 : Form
{

    bool IsJumping = false;
    List<Coin> clist = new List<Coin>();
    int poäng = 0;
    public Form1()
    {
        InitializeComponent();
    }

    private void TimerGravitation_Tick(object sender, EventArgs e)
    {

        if(!picSpelare.Bounds.IntersectsWith(picMark.Bounds) && IsJumping==false)
        {
            picSpelare.Top += 10;
        }
    }

Я был бы очень благодарен за любые советы, так как это мой последний проект в учебный класс.

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

Сначала вы должны выполнить ответ Умута Арпата (повернуть picCoin из личного в публичное c).

Затем вам следует инициализировать Класс Coin в конструкторе Form1 , подобный следующему:

private Coin _coin;
public Form1()
{
    InitializeComponent();
    _coin = new Coin();
}

И затем вы должны добавить графическое поле из класса Coin в список Form1 контролирует вот так:

this.Controls.Add(_coin.picCoin)

Это можно сделать и в конструкторе Form1 . Не добавляйте PictureBox в элементы управления формы из класса Coin (метод DrawTo () ).

0 голосов
/ 19 марта 2020
class Coin
{
    private PictureBox picCoin = new PictureBox();
    public PictureBox Box {
        get { return picCoin};
        set { picCoin = value};
    }
    ....
}

Для использования / доступа к коробке:

clist[i].Box // This is what you want 
0 голосов
/ 19 марта 2020

Я не знаю, правильно ли я понял вопрос, но сделаю picCoin publi c

make

private PictureBox picCoin = new PictureBox();

to

 public PictureBox picCoin = new PictureBox();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...