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.
Przycisk myszy działający tylko na kwadracie
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
Czy te „kilka wypełnionych kwadratów” może być osobnymi kontrolkami, np. Panelami? Wtedy byłoby prosto…
- Rejestracja: dni
- Ostatnio: dni
Moze być :) Tylko jeśli możesz mi podpowiedzieć jak to zrobić będzie mi bardzo miło:)
- Rejestracja: dni
- Ostatnio: dni
Każda kontrolka ma właściwość ContextMenuStrip. Tam wybierasz (wcześniej utworzone) menu.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 106
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.
- Rejestracja: dni
- Ostatnio: dni
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 106
C# to nie jest język interpretowany, musisz wstawić poszczególne panele do jakiejś kolekcji.
- Rejestracja: dni
- Ostatnio: dni
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)
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
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ć?
- Rejestracja: dni
- Ostatnio: dni
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