Przekazywanie obiektu do metody

0

Gdy wstawimy w aplikację okienkową buttony (lub inne obiekty), to klikając na konkretny z nich otrzymamy podgląd / dostęp do wartości przez nich przechowywanych (np. tekst, kolor, wielkość). Niby proste.

W mojej aplikacji mam listę wyświetlanych właśnie takich obiektów. Gdy kliknę na jeden z nich odbywa się coś takiego:

        private void Check_Me(int mouse_x, int mouse_y)
        {
            int q = 0;
            int num = 0;
            
            // znajdz ktory to obiekt poprzez porownanie jego lokalizacji z klikiem myszy
            foreach (var c in my_circles)
            {
                if ((mouse_x == c.x) && (mouse_y == c.y))
                {
                    num = q;
                }
                q++;
            }

            Show_Me(my_circles[num]);
        }

        private void Show_Me(Circle the_one)
        {
            // wyswietla dane dla tego objektu
        }

Zostanawiam się czy to poprawna droga przekazania danych tego jednego obiektu do metody.
Może można jeszcze prościej osiągnąć ten efekt.

1

Może coś takiego?

private void Check_Me(int mouse_x, int mouse_y)
{
    foreach (var circle in my_circles)
    {
        if (circle.checkHit(mouse_x, mouse_y)) {
            Show_Me(circle);
            break;
        }
    }
}
0

Można też tak:

private void CheckMe(int mouseX, int mouseY)
{
    var circle = myCircles.FirstOrDefault(c => c.CheckHit(mosueX, mouseY));
    if (circle != null)
        ShowMe(circle);
}

EDIT:
Można jeszcze wykorzystać to https://docs.microsoft.com/pl-pl/dotnet/api/system.collections.generic.list-1.find?view=netframework-4.8
lub to: https://docs.microsoft.com/pl-pl/dotnet/api/system.array.find?view=netframework-4.8
ale to już detale.

0

A dlaczego nie możesz wykorzystać sender ze zdarzenia click kontrolki?

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