Jak dynamicznie tworzyć kontrolki?

Odpowiedz Nowy wątek
2014-12-30 16:27
0

Witam,
Piszę do was z pytaniem jak dynamicznie dodać do Grida jakąś liczbę 'labeli' podaną wcześniej przez użytkownika aplikacji?

Mam następujący kod, żeby wam naświetlić obraz sytuacji:

        private void btn_Dalej_Click(object sender, RoutedEventArgs e)
        {
            if (podstrona == 1)
            {
                int.TryParse(txt_LiczbaPartii.Text, out liczba_partii);
                int.TryParse(txt_LiczbaMandatow.Text, out liczba_mandatow);
 
                if (liczba_partii > 0 && liczba_mandatow > 0)
                {
                    DodajPartie dodaj_partie = new DodajPartie(liczba_partii, liczba_mandatow);
                    ListaPartii.Add(dodaj_partie);
 
                    podstrona += 1;
 
                    grd_Podstrona_Pierwsza.Visibility = System.Windows.Visibility.Hidden;
                }
                else
                {
                    MessageBox.Show("Najpierw wprowadź dane!", "Informacja", MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }
 
            if (podstrona == 2)
            {
                grd_Podstrona_Druga.Visibility = System.Windows.Visibility.Visible;
 
                foreach (DodajPartie dodaj_partie in ListaPartii)
                {
                    if (aktualna_partia <= dodaj_partie.liczba_partii - 1)
                    {
                        nazwa_partii = txt_Nazwa.Text;
                        int.TryParse(txt_Glosy.Text, out ilosc_glosow);
 
                        lbl_Numer_Partii.Content = (aktualna_partia + 1).ToString();
 
                        if (nazwa_partii != "" && ilosc_glosow != 0)
                        {
                            dodaj_partie.Nazwa_Partii[aktualna_partia] = nazwa_partii;
                            dodaj_partie.Ilosc_Glosow[aktualna_partia] = ilosc_glosow;
                            aktualna_partia++;
                        }
                    }
                    else
                    {
                        podstrona++;
                        grd_Podstrona_Druga.Visibility = System.Windows.Visibility.Hidden;
                    }
                }
            }
 
            if (podstrona == 3)
            {
                foreach (DodajPartie wszystkie in ListaPartii)
                {
                    grd_Podstrona_Trzecia.Visibility = System.Windows.Visibility.Visible;
 
                    Label[] lblLista = new Label[wszystkie.liczba_partii];
 
                    for (int i = 0; i < wszystkie.liczba_partii; i++)
                    {
                        // ???????????
                    }
                }
 
            }
        }

Przyjmę zlecenia / projekty do wykonania w c#. Zainteresowanych zapraszam do konwersacji na PW.

Pozostało 580 znaków

2014-12-30 16:37
0

Czemu to musi być koniecznie do grida? Nie lepiej to dodać do na przykład listview?
Można to zrobić z gridem ale się trzeba z rzędami i kolumnami pierdzielić.

Pozostało 580 znaków

2014-12-30 16:44
0

Może być i ListView, po prostu w Gridzie zacząłem sobie Podstrony robić, by cała aplikacja była jednookienkowa.


Przyjmę zlecenia / projekty do wykonania w c#. Zainteresowanych zapraszam do konwersacji na PW.

Pozostało 580 znaków

2014-12-30 16:49

Zrób tablicę Labeli uzupełnij wartości takie jak nazwa, rozmiar, pozycja i następnie

grid.Children.Add(label[x]); //jakaś pętla i masz ;)

To powinno rozwiać wszystkie wątpliwości.


GG: 10101100010110000100011101 (BIN)
"Nie wszystko napisane w internecie jest prawdą" - Józef Piłsudski.
edytowany 2x, ostatnio: Trebuh, 2014-12-30 16:51
I wszystko jeden na drugim? - dam1an 2014-12-30 16:51
Napisałem że pozycje też ustawia. - Trebuh 2014-12-30 16:52

Pozostało 580 znaków

2014-12-30 17:00
1

Zrób to jak bozia przykazała, czyli kolekcja ObservableCollection i bindujesz do listview czy czego tam chcesz.
Tu masz przykład http://www.wpf-tutorial.com/l[...]w-data-binding-item-template/ tylko zamiast List<User> lepiej użyć ObservableCollection<User> wtedy nawet jak gdzieś później coś dodasz lub usuniesz to widok się zaktualizuje.

foreach (DodajPartie wszystkie in ListaPartii)

Strasznie źle to nazywasz. Nie wiadomo co to jest.
DodajPartie - to powinna być nazwa metody
ListaPartii - to nazwa kolekcji
czyli coś w stylu:

List<Partia> ListaPartii = new List<Parta>();// albo lepiej po prostu Partie
 
foreach(Partia partia in ListaPartii)
edytowany 1x, ostatnio: dam1an, 2014-12-30 17:01

Pozostało 580 znaków

2014-12-30 17:09
0

Wiem, wiem. Miałem wyedytować zanim napisałem, po prostu o 3 w nocy wczoraj to robiłem i całkiem z głowy mi wyleciało ;)


Przyjmę zlecenia / projekty do wykonania w c#. Zainteresowanych zapraszam do konwersacji na PW.

Pozostało 580 znaków

2014-12-30 17:23
0

Działa, zrobiłem to w ten sposób:

 
               foreach (DodajPartie Partie in ListaPartii)
                {
                    grd_Podstrona_Trzecia.Visibility = System.Windows.Visibility.Visible;
 
                    Label[] lblTablica = new Label[Partie.liczba_partii];
 
                    for (int i = 0; i < Partie.liczba_partii; i++)
                    {
                        lblTablica[i] = new Label();
                        {
                            lblTablica[i].Name = ("label" + i);
                            lblTablica[i].Content = Partie.Nazwa_Partii[i];
                            lblTablica[i].Tag = i;
                            lblTablica[i].Margin = new Thickness(5, loc, 0, 0);
                        }
 
                        grd_Podstrona_Trzecia.Children.Add(lblTablica[i]);
                        loc += 20;
                    }
                }

Przyjmę zlecenia / projekty do wykonania w c#. Zainteresowanych zapraszam do konwersacji na PW.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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