Próbuję dynamicznie dodawać skrzynki obrazków do formularza C# win32 dla aplikacji o niemalże produkcyjnej jakości, którą próbuję budować, i mam ją prawie całkowicie.Jak dynamicznie tworzyć obrazki, klikając przycisk?
Problem, na który napotykam, polega na tym, że nie mogę dodawać do niego obrazków ani formantów dynamicznie, w metodzie. Dodałem je do formularza za pomocą metody inicjowania Form1, ale jeśli dodaję formanty w, powiedzmy, metodzie button_click, to po prostu nie dodaje ich, chyba że mam kontener panelu, i wpisz panel1.Controls.Add (stuff) . Ale wtedy obrazek pojawia się w zupełnie innym miejscu niż zamierzano - i zablokowany przez, jak widać, sam panel. Większość ramek graficznych jest blokowana przez panel, a jego część - na zewnątrz - panel. Nie mam pojęcia, co się dzieje.
Oto kod używam, że dowiedziałem się online, aby dodać pictureboxes w sposobie przycisk kliknij:
PictureBox pb = new PictureBox();
pb.Size = new Size(this.Size.Width/14, this.Size.Width/12); //I use this picturebox simply to debug and see if I can create a single picturebox, and that way I can tell if something goes wrong with my array of pictureboxes. Thus far however, neither are working.
pb.BackgroundImage = Properties.Resources.cardback;
pb.BackgroundImageLayout = ImageLayout.Stretch;
pb.Location = new Point(50, 50);
pb.Anchor = AnchorStyles.Left;
pb.Visible = true;
InitializeComponent();
this.Controls.Add(pb);
PictureBox[] pbName = new PictureBox[totaldeckcount];
for (int i = 0; i < totaldeckcount; i++)
{
pbName[i] = new PictureBox();
pbName[i].Size = new Size(this.Size.Width/14, this.Size.Width/12);
pbName[i].BackgroundImage = Properties.Resources.cardback;
pbName[i].BackgroundImageLayout = ImageLayout.Stretch;
pbName[i].Image = Properties.Resources.cardback;
pbName[i].Anchor = AnchorStyles.Left;
pbName[i].Visible = true;
int x = 0;
int y = 15;
if (i > 10)
{
y += (int)((this.Size.Height * i) + 30);
}
x = (int)((this.Size.Width/12) * Math.IEEERemainder(i, 10));
pbName[i].Location = new Point(x, y);
this.Controls.Add(pbName[i]);
}
Cardback jest struktura pracy, widziałem rzeczą pojawiają się przy próbie tworzenie ramki obrazka w metodzie Form1, więc to nie problem. Problem nie -appear- być moim składnia, ponieważ udało mi się skopiować kod
PictureBox pb = new PictureBox();
bezpośrednio do metody Form1 i wykonany dobrze.
Nie mogę znaleźć niczego w Internecie za pośrednictwem Google, a to mnie całkowicie zepsuło.
Usuń drugie wywołanie 'InitializeComponent();', które znajduje się wewnątrz pętli 'for'. – keyboardP
I usuń 'pbName [i] .Parent = this;' –
@keyboardP Bez kości, ten sam wynik. Jedynym powodem, dla którego jest tam kilka razy, jest to, że próbowałem go zainicjować, to haha; ale usunięcie tego w pętli nic nie dało, ten sam wynik. Nic nie pojawia się na kliknięciu przycisku. – Codefun64