Diskuze: Použítí vícekrát jednoho pictureboxu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 36 zpráv z 36.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
udělej si metodu createShot, která vytvoří picturebox, nastaví mu potřebné vlastnosti a přidá ho na formulář.
Ano děkuji a ještě trochu poradit s tou metodou prosím
public void CreateShoot()
{
PictureBox pb = new PictureBox();
pb.BackgroundImage = "shot.png"; // Nefunguje, jak nastavím pozadí?
pb.BackColor = ....; // Jak na Trasparent?
}
Nefunguje, jak nastavím pozadí?
Image.FromFile("shot.png")
Jak na Trasparent?
// tuším, že
Color.Transparent
Tak nevím proč, ale prostě to nejde
public void CreateShoot()
{
PictureBox pb = new PictureBox();
pb.Width = 5;
pb.Height = 10;
//pb.BackgroundImage = Image.FromFile("shot.png");
pb.BackColor = Color.Red;
pb.Left = pbShip.Left + (pbShip.Width / 2);
pb.Top = pbShip.Top++;
}
private void ShootTimer_Tick(object sender, EventArgs e)
{
CreateShoot();
}
Podle toho kódu by se to mělo každých 0,1s vygenerovat a letět nahoru.
Zkus ještě toto na to nastavení toho obrázku:
obrazek.Image = new Bitmap("obrazek.jpg");
Když sem to skusil tak se mi pokaždé sekl debuging nevim proč.
Já taky zrovna dělám s pictureboxem a taky jsem narazil na stejný problém. Šel jsem se tedy podívat do Form1.Designer.cs, kde jsou všechny kontrolky a úplně dole jsem narazil na:
//
//form1
//
...
this.Controls.Add(pictureBox1);
Jak vidíš, aby šel picturebox zobrazit nejdříve ho musíš přidat do form.
Dělám si hru jen tak pro radost. Jak hýbeš vesmírnou lodí a ze zhora třeba něco padá a ty to sestřeluješ. Tak něco podobného Ale nějak sem se zasekl u toho střílení a u toho padání. :/
Zapomněl jsem, že:
this.Controls.Add(pictureBox1);
je u panelu. U pictureboxu ho musis dat do layoutu:
layout.Controls.Add(picturebox);
A kam to mám jako napsat? do tý metody kde tvořím ten picturebox? Nebude jich pak přidaných desítky?
Když změníš pozadí komponenty nebo obecně pracuješ s grafikou, tak bys měl volat metodu Refresh()
Tak už se v tom docela strácím
Takže chceme toto že?
public void CreateShoot()
{
PictureBox pb = new PictureBox();
layout.Controls.Add(pb);
pb.Width = 5;
pb.Height = 10;
//pb.BackgroundImage = Image.FromFile("shot.png");
pb.BackColor = Color.Red;
pb.Left = pbShip.Left + (pbShip.Width / 2);
pb.Top = pbShip.Top;
pb.Top += 2;
}
private void ShootTimer_Tick(object sender, EventArgs e)
{
CreateShoot();
panel.Refresh();
}
Stejně to nejde CO je špatně prosím opravte ¨Díky moc.
ono ti to asi funguje, ale jestli máš zakomentovaný ten řádek kde nastavuješ obrázek, tak tam máš jen průhledné pictureboxy.
Já tam ten obrázek vůbec nemám. Mám tam ale barvu pozadí to by mělo vykreslit tedy červený obdelníček ne? to ale taky nevidím
pb.BackColor = Color.Red;
Já to mám udělaný takhle: Když se zmáčkne mezerník tak se spustí timer a ten vytváří ty pictureboxy podle té metody a refreshuje panel.
a funguje to I tak? Si tam hoď breakpoint, jestli se to skutečně zavolá.
JJ, když do té metody CreateShot(); dám třeba něco jinýho. třeba aby s něco posunulo o x pixelů, posune se to takže ta metoda funguje.
layout.Controls.Add(pb);
posuň na konec metody (což by to sice nemělo způsobovat, ale chronologicky je to lepší) a zkus ji nahradit za
this.Controls.Add(pb);
jj, helejce asi jsme se posunuli trochu dál
panel.Visible = false;
A najednou to tam bylo vidět Ta střela tam byla, ale jenom jedna a nehýbala se což jsou další problémy. Ale už víme že tam je schovaná pod tím panele. Jak s ní nahoru
musíš ji posunout do toho panelu
panel.Controls.Add(...)
jj super, už to mám.. A teď to nějak rozhýbat bohužel k tomu nijak nemůžu abych to rozhýbal v timeru protože to v tom timeru vůbec nevidím :/
to protože si to musíš uložit někam, tak abys to viděl.
vytvoříš proměnnou na formuláři a uložíš to do ni.
class Form {
PictureBox shoot; // v kódu s ní budeš pracovat jako this.shoot
}
Zobrazeno 36 zpráv z 36.