Wymiana danych między buttonami

0

Jak przekazać zmienne między dwoma buttonami?
Próbowałem kilka razy i już się w tym momencie poddaję. Może ktoś pomóc?

        public void losuj_Click(object sender, RoutedEventArgs e)
        {
            Random LosowaLiczba = new Random(50);
        }

        private void sprawdz_Click(object sender, RoutedEventArgs e)
        {
            //odgadnij textbox
            losuj_Click Losowa = new losuj_Click();

            if (odgadnij.Text.Equals(Losowa.LosowaLiczba))
            {
                wynik.Content = "Wygrałeś";
            }
            else
            {
                wynik.Content = "Próbuj dalej";
            }
        }

0

Przechowaj zmienną jako pole klasy np.

class Test
{
	private string variable = "";
	
	public void SetVariable()
	{
		variable = "Test";
	}
	
	public void ResetVariable()
	{
		variable = "";
	}
}
0

Hmm, nie kapuje póki co

0

Popatrz tutaj: https://ideone.com/llPC4D
Wylosowałem pięć liczb losowych i pokazałem je każdorazowo. Wynik i "maszynę losującą" przechowuję jako pola klasy przez co mogę z nich korzystać w metodach tejże. Tutaj gdzie mam prezentacje wyniku możesz zrobić swoje sprawdzanie.

0

Ok, ale w WPFie w jaki sposób mam się dostać do tej klasy poprzez Button

Są dwa. Jeden losuje randomową liczbę (powiedzmy w zakresie od 0 do 50) a drugi służy do odgadnięcia.
Czyli pobiera co użytkownik wpisał w TextBoxie i sprawdza.

0

Ustaw te pola z ideone w tej samej klasie, w której masz metody losuj_Click i sprawdz_Click i tam z nich korzystaj.

0
        public MainWindow()
        {
            InitializeComponent();

        }

        private Random rnd;
        private int number;

        public TestRandom()
        {
            rnd = new Random();
        }

        public void SetRandomNumber()
        {
            number = rnd.Next(1, 50);
        }



        public void losuj_Click(object sender, RoutedEventArgs e)
        {

            SetRandomNumber();
        }

        private void sprawdz_Click(object sender, RoutedEventArgs e)
        {
            //odgadnij textbox


            if (odgadnij.Text.Equals(rnd))
            {
                wynik.Content = "Wygrałeś";
            }
            else
            {
                wynik.Content = "Próbuj dalej";
            }
        }
    }
}

Błąd "Method must have a return typ"

0

Poczytaj o konstruktorach i tworzeniu klas w C# zamiast kopiować kod. Nie znasz podstaw języka. Tutaj masz zwyczajnie metodę która aspiruje na bycie konstruktorem klasy, której konstruktorem nie jest. Chodzi o TestRandom. Bez podstaw będziesz się potykał o kuriozalne rzeczy, a to bez sensu. Musisz rozumieć co piszesz. Samych tutków C# jest bez liku w sieci.

Co to jest pole klasy też pewnie nie wiesz skoro nie wiesz czym jest konstruktor. Poczytaj po prostu, ot co. :-)

0

Nie rozumiesz tego komunikatu błędu? Każda metoda musi mieć określone jaki zwraca typ. Brakuje ci tego w TestRandom(); Dopisz tam void lub coś.

0

Fakt, pominęłem to z pośpiechu, za dużo czasu mi to zajęło. Dziękuje za pomoc.

0

Ale skasowanie TestRandom czy samo wstawienie tam void'a da Ci tylko NullReferenceException. Nie tędy droga. Poza tym tutaj odgadnij.Text.Equals(rnd) porównujesz różne typy danych co się nawet nie skompiluje.

0

skompilować się skompilowało, ale faktycznie błąd jest NullReferenceException

0

Nie utworzyłeś obiektu. Przenieś to rnd = new Random(); do konstruktora klasy. No i zmień to porównanie odgadnij.Text.Equals(rnd) na zgodne typy np. skoro pole jest typu int to zamień to co jest w TextBoksie na inta i dopiero porównaj. Podpowiedź: int.TryParse

0

Poradziłem sobie, działa tak jak chciałem żeby działało, dziękuję za wskazówki. Brak mi praktyki jeszcze.

    private Random rnd;
        private int number;
        
        public void SetRandomNumber()
        {
            try
            {
                rnd = new Random();
                number = rnd.Next(1,10);
               
            }
            catch (NullReferenceException)
            {
                MessageBox.Show("Nieznany błąd");
            }
        }



        public void losuj_Click(object sender, RoutedEventArgs e)
        {

            SetRandomNumber();
        }

        private void sprawdz_Click(object sender, RoutedEventArgs e)
        {
            //odgadnij textbox
            int liczba;
            int.TryParse(odgadnij.Text, out liczba);
            
            if (liczba.Equals(number))
            {
                wynik.Content = "Wygrałeś";
            }
            else
            {
                wynik.Content = "Próbuj dalej";
            }
        }
    }
0

Łapanie wyjątku wewnątrz SetRandomNumber jest niepotrzebne.

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