Użycie kontrolki Button w kodzie

0

Witam!
Pisze gre saper i napotkalem pewien probrem logistyczny. Pomyślałem że zle zaplanowalem swoja aplikacje, ale w programowaniu wiele chwytow jest dozowlonych wiec postanowilem zapytac na forum przed przebudową kodu. Napisalem najpierw mechanike gry, losowania bomb, ustalania ile bomb jest w poblizu, odkrywania terenu gdzie nie ma bomb itp. Szkielet mam gotowy. Pomyslalem wiec ze sprobuje swoich sił w dorobieniu do tego interfejsu bardzo podobnego do tego z klasycznego sapera. Narobilem 100 przycisków, bo nie wiedzialem jak inaczej moge to rozwiazac. Do kazdego dodalem po kliknieciu wywolanie metody ktora sprawdza po numerze buttona w jakim znajduje sie polozeniu (konwertuje nazwe buttona np. button86 na pozycje w tablicy dwuwymiarowej (pole gry jest reprezentowane przez tablicę 10x10)). Wiec dochodzę do punktu w ktorym moge dany przycisk polaczyc z konkretna metoda w programie - mam pozycje na polu gry, sprawdzam czy jest bomba, lub czy to puste miejsce, jesli nie to chce zmienic text buttona na liczbe min dookola oraz jego styl. Jednak wymaga to zaprogramowania reakcji na kazdy przycisk 100 razy. Tu pojawia sie do was pytanie. Czy w metodzie niezwiazanej z danym przyciskiem, wiedzac co chce zrobic i majac w zmiennej nazwe przycisku moge to jakos zaprogramowac? Czytalem ze musialbym uzyc runtime compilera, jednak nie wiem jak to zrobic, a innego rozwiazania nie znalazlem. Jakies pomysly?

W skrocie chodzi o to by moc swobodnie zaprogramowac w jednej metodzie zmiany na 100 przyciskach znajac nazwe przycisku i majac ja w zminnej typu string.

Dziekuje za pomoc, pozdrawiam.

0

Nie wystarczy. Moge wszystkie 100 przyciskow obsluzyc jedna metoda w zdarzeniu click. Tylko jak w tej metodzie napisac ze ten przycisk ktory akurat ktos nacisnal zmienia swoje wsrtosci? Bo jednak piszac np this.button1.text = "cos"; musze odniesc sie do konkretnego przycisku. A chce napisac metode dzialajaca dla kazdego z tych 100 tak samo. Bo inaczej czeka mnie powielanie kazdej metody button_click 100 razy dla kazdego przycisku..

2
void anyButton_Click(object sender, EventArgs e)
{
    var button = (sender as Button);
    button.Text = "bar"; //Tekst zmieni się dla przycisku który został kliknięty.
}
2

Ja bym zrobił że każde pole do kolejny obiekt posiadający składową button i bomb a zdarzenie onclick jako metoda tej klasy i 0 problemów ;)

0

Wszystko ok. Ale teraz np mam metodę która wywołuje jako odkryj plansze, rekurencyjnie. Ona odpowiada za to czy dane pole powinno zostać odkryte (jak wiadomo po jednym kilknieciu w saperze odkrywa sie obszar dookoła). Dlatego musze zmienic atrybuty przycisków, które odpowiadają polom na tym obszarze. Wiem np. że po klikniecu button65 button 68,69,70,71 ma zostać zmieniony, innym razem zmienione maja byc buttony 98,99,100. W jaki sposób mogę w polecenie wcisnąć tą nazwę? Wywołując twoja funkcje mogę ustawić polecenia tylko dla konkretnego przycisku. Chce po prostu nazwy Button67 w stringu móc używać jako elementu. Jest to w ogóle możliwe?

1

Tak jak napisałem już, masz gdzieś tablice dwuwymiarową (symulacja planszy), która przechowuję kolejne obiekty typu pole. klasa pole zawiera składową button składową mine dodatkowo możesz dodać składową która ci bedzie przechowywała te informacje o punktach lub zrobić to na jednej składowej poprzez -1 mina, 0 nic nie ma, liczby dodanie punkty. w tej klasie masz też metodę onclick zrobioną którą podpinasz do przycisku w konstruktorze, do konstruktora przekazujesz referencyjni formę i w konstruktorze również "kładziesz" przycisk na forme.

0
class Pole
        {
            Button button;
            int wartosc;
        }
        Pole[,] tablica = new Pole[10,10];

wartość to składowa w której jest przechowywana informacja o tym co jest na danym polu. 9 - mina, 0 - puste pole, 1-8 - liczba min w pobliżu. Ale co dalej?
"w tej klasie masz też metodę onclick zrobioną którą podpinasz do przycisku w konstruktorze, do konstruktora przekazujesz referencyjni formę i w konstruktorze również "kładziesz" przycisk na forme." - tego fragmentu nie jestem w stanie pojąć :(

1

Napisałem ci co masz zrobić i dla czego użyłeś

string button;

a nie Button button;

 ?
0

Pozostałem jednak przy konsolowej wersji programu, próba stworzenia tego co mówiłeś mnie przerosła, nie rozumiałem z tego nic, mój sposób z przyciskami był zły więc chyba temat do zamknięcia..

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