Samouczek: dodawanie problemów matematycznych do aplikacji WinForms do testu matematycznego
W tej serii czterech samouczków utworzysz test matematyczny. Test zawiera cztery losowe zadania matematyczne, na które osoba rozwiązująca quiz stara się odpowiedzieć w określonym czasie.
Kontrolki używają kodu C# lub Visual Basic. W tym drugim samouczku uczysz się, jak uczynić quiz bardziej wymagającym, dodając kod dla problemów matematycznych opartych na losowych liczbach. Utworzysz również metodę o nazwie StartTheQuiz()
, aby rozwiązać problemy.
Z tego drugiego samouczka dowiesz się, jak wykonywać następujące działania:
- Napisz kod, aby utworzyć obiekty losowe do użycia w problemach matematycznych.
- Dodaj procedurę obsługi zdarzeń dla przycisku uruchamiania.
- Napisz kod, aby rozpocząć test.
Warunki wstępne
Ten samouczek opiera się na poprzednim samouczku, Tworzenie testu matematycznego aplikacji WinForms. Jeśli nie ukończyłeś tego samouczka, zapoznaj się z nim w pierwszej kolejności.
Utwórz losowe zadanie z dodawania
W projekcie programu Visual Studio wybierz pozycję Windows Forms Designer.
Wybierz formularz Form1.
Na pasku menu wybierz pozycję View>Code. Form1.cs lub Form1.vb pojawia się w zależności od używanego języka programowania, dzięki czemu można wyświetlić kod formularza.
Utwórz obiekt Random, dodając instrukcję
new
w górnej części kodu w Form1.cs lub Form1.vb.
Można użyć instrukcji new
, takich jak ta, aby tworzyć przyciski, etykiety, panele, okna dialogowe przeglądania plików (OpenFileDialogs), okna dialogowe kolorów (ColorDialogs), odtwarzacze dźwięku (SoundPlayers), generatorów losowych (Randoms), a nawet formularze. Te elementy są nazywane obiektami .
Po uruchomieniu programu formularz zostanie uruchomiony. Kod u podstaw tworzy obiekt Random i nazywa go randomizer.
Test wymaga zmiennych do przechowywania losowych liczb tworzonych dla każdego problemu. Przed użyciem zmiennych należy je zadeklarować, co oznacza wyświetlanie ich nazw i typów danych.
Dodaj dwie zmienne całkowite do formularza i nadaj im nazwę addend1 i addend2 w Form1.cs lub Form1.vb.
Notatka
Zmienna całkowita jest znana jako int w języku C# lub Integer w języku Visual Basic. Ten rodzaj zmiennej przechowuje liczbę dodatnią lub ujemną z -2147483648 przez 2147483647 i może przechowywać tylko liczby całkowite, a nie dziesiętne.
Podobna składnia służy do dodawania zmiennej całkowitej, tak jak w przypadku dodawania obiektu Random, jak pokazano w poniższym kodzie.
Dodaj metodę o nazwie
StartTheQuiz()
Form1.cs lub Form1.vb. Ta metoda używa metody Next() obiektu Losowego do generowania losowych liczb dla etykiet.StartTheQuiz()
ostatecznie rozwiąże wszystkie problemy, a następnie uruchomi czasomierz, więc dodaj te informacje do komentarza podsumowującego. Funkcja powinna wyglądać podobnie do poniższego kodu./// <summary> /// Start the quiz by filling in all of the problems /// and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. // Generate two random numbers to add. // Store the values in the variables 'addend1' and 'addend2'. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); // Convert the two randomly generated numbers // into strings so that they can be displayed // in the label controls. plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); // 'sum' is the name of the NumericUpDown control. // This step makes sure its value is zero before // adding any values to it. sum.Value = 0; }
Jeśli używasz metody Next()
z obiektem Losowym, takim jak podczas wywoływania randomizer.Next(51)
, otrzymasz losową liczbę mniejszą niż 51 lub z zakresu od 0 do 50. Ten kod wywołuje randomizer.Next(51)
, aby dwie losowe liczby sumowały się do wyniku z przedziału od 0 do 100.
Przyjrzyj się bliżej tym oświadczeniom.
Te instrukcje ustawiają właściwości TextplusLeftLabel i plusRightLabel, aby wyświetlały dwie losowe liczby. Kontrolki etykiety wyświetlają wartości w formacie tekstowym, a w programowaniu ciągi znaków przechowują tekst. Metoda ToString()
każdej liczby całkowitej konwertuje liczbę całkowitą na tekst, który może być wyświetlany przez etykietę.
Tworzenie losowych problemów z odejmowaniem, mnożeniem i dzieleniem
Następnym krokiem jest zadeklarowanie zmiennych i podanie losowych wartości dla innych problemów matematycznych.
Dodaj zmienne całkowite dla pozostałych problemów matematycznych do formularza po dodaniu zmiennych problemowych. Kod w Form1.cs lub Form1.vb powinien wyglądać podobnie do poniższego przykładu.
public partial class Form1 : Form { // Create a Random object called randomizer // to generate random numbers. Random randomizer = new Random(); // These integer variables store the numbers // for the addition problem. int addend1; int addend2; // These integer variables store the numbers // for the subtraction problem. int minuend; int subtrahend; // These integer variables store the numbers // for the multiplication problem. int multiplicand; int multiplier; // These integer variables store the numbers // for the division problem. int dividend; int divisor;
Zmodyfikuj metodę
StartTheQuiz()
w Form1.cs lub Form1.vb, dodając następujący kod, zaczynając od komentarza "Wypełnij problem z odejmowaniem"./// <summary> /// Start the quiz by filling in all of the problem /// values and starting the timer. /// </summary> public void StartTheQuiz() { // Fill in the addition problem. // Generate two random numbers to add. // Store the values in the variables 'addend1' and 'addend2'. addend1 = randomizer.Next(51); addend2 = randomizer.Next(51); // Convert the two randomly generated numbers // into strings so that they can be displayed // in the label controls. plusLeftLabel.Text = addend1.ToString(); plusRightLabel.Text = addend2.ToString(); // 'sum' is the name of the NumericUpDown control. // This step makes sure its value is zero before // adding any values to it. sum.Value = 0; // Fill in the subtraction problem. minuend = randomizer.Next(1, 101); subtrahend = randomizer.Next(1, minuend); minusLeftLabel.Text = minuend.ToString(); minusRightLabel.Text = subtrahend.ToString(); difference.Value = 0; // Fill in the multiplication problem. multiplicand = randomizer.Next(2, 11); multiplier = randomizer.Next(2, 11); timesLeftLabel.Text = multiplicand.ToString(); timesRightLabel.Text = multiplier.ToString(); product.Value = 0; // Fill in the division problem. divisor = randomizer.Next(2, 11); int temporaryQuotient = randomizer.Next(2, 11); dividend = divisor * temporaryQuotient; dividedLeftLabel.Text = dividend.ToString(); dividedRightLabel.Text = divisor.ToString(); quotient.Value = 0;
Ten kod używa metody Next() klasy Random nieco inaczej niż w przypadku problemu dodawania. Gdy nadasz metodzie Next()
dwie wartości, wybiera liczbę losową większą lub równą pierwszej wartości i mniejszą niż druga.
Korzystając z metody Next()
z dwoma argumentami, możesz upewnić się, że problem z odejmowaniem ma pozytywną odpowiedź, odpowiedź mnożenia wynosi co najwyżej 100, a odpowiedź dzielenia nie jest ułamkiem.
Dodaj procedurę obsługi zdarzeń do przycisku uruchamiania
W tej sekcji dodasz kod, aby rozpocząć test po wybraniu przycisku uruchamiania. Kod uruchamiany w reakcji na zdarzenie, takie jak wybór przycisku, jest nazywany procedurą obsługi zdarzeń.
W programie Windows Forms Designerkliknij dwukrotnie przycisk Rozpocznij test lub wybierz go, a następnie wybierz Wprowadź. Zostanie wyświetlony kod formularza, a nowa metoda jest widoczna.
Te działania dodają obsługę zdarzeń kliknięcia do przycisku Start. Gdy użytkownik quizu wybierze ten przycisk, aplikacja uruchomi kod, który zostanie dodany do tej nowej metody.
Dodaj następujące dwie instrukcje, aby program obsługi zdarzeń uruchamiał test.
Pierwsza instrukcja wywołuje nową metodę o nazwie StartTheQuiz()
. Druga instrukcja ustawia właściwość Enabled kontrolki startButton na false
, tak aby użytkownik quizu nie mógł wybrać przycisku podczas testu.
Uruchamianie aplikacji
Zapisz kod.
Uruchom aplikację, a następnie wybierz pozycję Rozpocznij test. Wyświetlane są losowe problemy matematyczne, jak pokazano na poniższym zrzucie ekranu.
Następne kroki
Przejdź do następnego samouczka, aby dodać czasomierz do testu matematycznego i sprawdzić odpowiedzi użytkowników.