numeracja kontrolek utworzonych przez pętle

Odpowiedz Nowy wątek
2011-08-01 17:53
matrix0123456789
0

Witam. Korzystam z c#, .net 4.0 i WPF. Mam funkcję która generuje kilka elementów DockPanel i umieszcza je wewnątrz jednego WrapPanel'a. Jak zrobić, by wewnątrz metody dockmouseenter móc rozpoznać który DockPanel został kliknięty? Chodzi mi o jakieś ponumerowanie tych DockPaneli.

        private void parseGames()
        {
            this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)(() =>
            {
                int i=0;
                while(i< serwerostatni.GetElementsByTagName("games").Item(0).ChildNodes.Count)
                {
                    DockPanel dock = new DockPanel();
                    dock.Height = 165;
                    dock.Width = 136;
                    System.Windows.Controls.Label lab = new System.Windows.Controls.Label();
                    lab.Content = serwerostatni.GetElementsByTagName("games").Item(0).ChildNodes.Item(i).Attributes.GetNamedItem("name").InnerText;
                    dock.MouseDown += dockmouseenter;
 
                    dock.Children.Add(lab);
                    listagier.Children.Add(dock);
 
                    i++;
                }
            }));
        }
 
        void dockmouseenter(object o, System.Windows.Input.MouseEventArgs a)
        {
            char[] splitn = new char[1];
            splitn[0] = '/';
            enginestart(0);
            System.Threading.ThreadPool.QueueUserWorkItem(start);
        }

Pozostało 580 znaków

2011-08-01 19:21
Jan
0

Każdemu dockowi ustaw Name.

Twoja metoda jako pierwszy parametr przyjmuje object o, a właściwie sender, czyli jesli ten obiekt zrzutujesz na Dock to dostaniesz sie do klikniętego docka.

Pozostało 580 znaków

2011-08-01 19:26
0

Kiedyś musiałem dodać na formę n PictureBox'ów i odczytać, który kliknięto, czyli podobna sytuacja to twojej. Napisałem klasę, w której trzymałem EventHandler na Click i odczytywałem this.// itd.


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-08-02 11:07
0

Wszystkie DockPanel, po inicjacji i nadaniu wartości startowych, wrzucasz do listy. W dockmouseenter rzutujesz sender (w twoim przypadku object o) na DockPanel i wyszukujesz go na wcześniej stworzonej liście. Tym sposoben możesz łatwo, i bez numeracji, znaleźć i odwołać się do wcześniej utworzonego DockPanelu.

edytowany 1x, ostatnio: havi, 2011-08-02 11:08

Pozostało 580 znaków

2011-08-02 11:21
ŁF
1
havi napisał(a)

Wszystkie DockPanel, po inicjacji i nadaniu wartości startowych, wrzucasz do listy. W dockmouseenter rzutujesz sender (w twoim przypadku object o) na DockPanel i wyszukujesz go na wcześniej stworzonej liście. Tym sposoben możesz łatwo, i bez numeracji, znaleźć i odwołać się do wcześniej utworzonego DockPanelu.

...tworząc niepotrzebną tablicę, niepotrzebnie alokując pamięć, marnując cykle procesora na jej przeszukanie i tworząc potencjalny wyciek pamięci. każda kontrolka zawiera pole Tag typu object, przy tworzeniu kontrolek wystarczy zapodać tam odpowiedni numer porządkowy, a potem odczytać go z sendera w odpowiednim zdarzeniu. i już.

@matrix: nie mieszaj polskiego języka z angielskim, wychodzą z tego potworki z szyją żyrafy i tułowiem ślimaka. stosuj również składnię zgodną z .net - camel case, bo inaczej dokładasz swojemu żyrafoślimakowi jeszcze ośli ogon.


edytowany 3x, ostatnio: ŁF, 2011-08-02 11:26

Pozostało 580 znaków

2011-08-02 20:38
matrix0123456789
0

Dziękuję, działa. Zastosowałem rzutowanie sendera i odczytywanie „tag”u.

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