Przycisk myszy działający tylko na kwadracie

0

Przepraszam za szczątkowy opis, teraz postaram się zrobić to dokładniej.
Rysuję sobie na formie kilka wypełnionych kwadratów robię to przy pomocy
Graphics
Chciałbym aby po najechaniu na dany kwadrat można było prawym przyciskiem myszy wywołać menu kontekstowe, a w nim pozycje do zmiany koloru np danego kwadratu lub do usunięcia go. Oczywiście chodzi mi tylko o to aby pojawiło się menu na danym kwadracie i operacje były wykonywane tylko na nim.

0

Czy te „kilka wypełnionych kwadratów” może być osobnymi kontrolkami, np. Panelami? Wtedy byłoby prosto…

0

Moze być :) Tylko jeśli możesz mi podpowiedzieć jak to zrobić będzie mi bardzo miło:)

0

Każda kontrolka ma właściwość ContextMenuStrip. Tam wybierasz (wcześniej utworzone) menu.

0

A nie masz położenia tych kwadratów zapisanych w jakiejś strukturze? Albo nie mają one stałego położenia? Wtedy możesz sprawdzić pozycję myszy. Jest dostępna w EventArgs funkcji onclick.

0

Jak można iterować po tych panelach?

for (int i = 0; i < 10; i++)
            {
                if ()
                    panel +""+ i++ +""+.BackColor = Color.AliceBlue;
            }

z góry dzięki za pomoc

0

C# to nie jest język interpretowany, musisz wstawić poszczególne panele do jakiejś kolekcji.

0

O dzięki działa!:)

0
for (int i = 0; i < 10; i++)
{
    if ()
        panel +""+ i++ +""+.BackColor = Color.AliceBlue;
    }

Nie da się tak, ale można tak:

foreach (var control in Controls)
{
    Panel panel = control as Panel;
    if (panel != null)
    {
        panel.BackColor = Color.AliceBlue;
    }
}

(zmieniamy BackColor każdego panelu na AliceBlue)

0

Można to również zapisać jako:

foreach (var panel in Controls.OfType<Panel>()) panel.BackColor = Color.AliceBlue;

albo

Controls.OfType<Panel>().ToList().ForEach(p => p.BackColor = Color.AliceBlue);

Aczkolwiek zdecydowanie polecam rozwiązanie z foreach.

0

Ok z tym foreach jest ok ale chciałbym aby przed zmianą koloru był sprawdzany jeszcze warunek ale kombinuje i mi nie wychodzi w którym miejscu trzeba ifa wstawić?

0

jakikolwiek if

0

Uporałem sie juz z tymi panelami teraz mam taki problem

        private void panel1_MouseClick(object sender, MouseEventArgs e) 
        {
            if (e.Button == MouseButtons.Right)
            {
                Point pt = panel1.PointToScreen(e.Location);
                contextMenuStrip1.Show(pt);
            }
        }

klikam prawym na pierwszy button i nic sie nie dzieje w czym moze tkwic problem

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