Dodanie kontrolki do form z innej klasy

0

Dobry wieczór,
pytanie pewnie dla niektórych banalne, jednak jestem początkujący i nie mogę sobie z tym poradzić. Próbuję napisać fabrykę abstrakcyjną, jeśli otworzę plik .bmp to chciałbym w form1 wyświetlić picturebox'a, jeśli .txt to textboxa.

Dla przykładu:

 public class PodgladTxt : IPodlgad
    {
       
        private TextBox txtPodglad;

        public PodgladTxt()
        {
            txtPodglad = new TextBox();
            txtPodglad.Width = 100;
            txtPodglad.Height = 100;

        }
    }

Chciałbym to wyświetlić w formie, jak to zrobić? Najlepiej jakaś prosta metoda, którą zrozumiem w krócej niż 7 dni :P

0

o dziedziczeniu coś było? ;-)

kod poglądowy.

Control podglad;
...
switch (fileType)
{
   case TXT: podglad = new TextBox(); break;
   case BMP: podglad = new PictureBox(); break;
}
0

Może niezbyt jasno to opisałem. Po wczytaniu pliku, na podstawie rozszerzenia wybieram odpowiednią klasę - ale nie w tym problem.

Mam powiedzmy class A, w której chcę dodać TextBox - jak to zrobić? Przecież nie mam dostępu do form1.Controls.Add(textBox1);

Dodam, że:

f = new Form();
            txtPodglad = new TextBox();
            txtPodglad.Width = 100;
            txtPodglad.Height = 100;
            f.Width = 100;
            f.Height = 100;
            f.Controls.Add(txtPodglad);
            f.Show();

Działa tak, jak tego oczekuję poza tym, że to ma nie być nowy form, tylko ten główny form1, do którego nie wiem jak dodać cokolwiek spoza klasy.

2

musisz albo przekazać formę klasie A (np. w konstruktorze) i w klasie A robisz form.Controls.Add, albo w klasie A zrobić funkcję/właściwość/pole zwracającą kontrolkę, i w formie robisz this.Controls.Add(a.DawajKontrolkę());

0

Chyba sobie zaraz włosy powyrywam.

f.dajPodglad(this);

//w innej klasie

public PodgladTxt(Form form)
        {
            txtPodglad = new TextBox();
            form.Controls.Add(txtPodglad);
        }

Jak próbuję zmienić w tym samym miejscu kolor okna, to działa. Próbowałem także odświeżyć form. Nie jest tak, że kontrolki mogę dodać tylko przed InitializeComponent();? Bo Nawet robiąc to w klasie głównej, również nic się nie pojawia (chyba, że dam właśnie przed InitializeComponent();). W ogóle w dobry sposób to przekazuję do konstruktora?

Edit:
Już działa, myślałem, że jeśli nie podam location, to domyślnie będzie to lewy górny róg - niestety musiałem się mylić. Teraz jest okej. Dziękuję za pomoc, plus dla Ciebie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1