numeracja kontrolek utworzonych przez pętle

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);
        }
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.

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.

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.

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.

0

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

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