User Rating: 0 / 5

Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive
 

Друзья, предлагаю вам постичь азы программирования на примере создания простейшей программы на C# для тренировки устного счета. Программа будет выводить несложный пример, а пользователь должен ввести правильный ответ.

Программа должна проверить правильность ответа. Вот как будет выглядеть ее интерфейс





В этом уроке мы научимся делать простейший интерфейс программы, работать с текстовыми полями, метками, кнопками (т.е использовать их свойства и методы), научимся работать со случайными числами.

А в последующих уроках мы усложним, точнее улучшим программу, добавив в нее функциональности:

  • ограничение по времени,
  • количество задаваемых примеров,
  • возможность регистрации пользователя, чтобы в зависимости от уровня пользователя программа усложняла задания,
  • график успеваемости пользователя,
  • возможность настройки программы самим пользователем
  • и другое.

Если вы не знаете где взять среду разработки C#, отсылаю вас к видеуроку, автором которого является Цветков-Омеличев Алексей. Вообще рекомендую посмотреть его уроки. Он выпустил их пока пять. В первом уроке с шестой минуты он рассказывает где можно взять среду проктирования. Можно скачать отсюда как бесплатный Visual C# 2010 Express так и ознакомительную 90-дневную версию полной Visual Studio 2010 Professional.

В моем минникурсе я опускаю разъяснение базовых понятий, а сразу приступаю к программированию, походу объясняя их.

Скажу сразу, что следующих уроков пока нет. Если вам интересна идея предлагаю подписаться на мою рассылку, чтобы вы получали уведомления о последующих выпусках. Также буду рад вашему активному участию в разработке данной программы. Оставляйте комментарии здесь или присылайте мне на почту. Следующий выпуск выйдет, когда подпишутся не менее 50 подписчиков. Не хочу делать уроки в пустоту. И так, приступим.

Шаг1

Чтобы поместить какой-либо элемент управления на форму надо выбрать его в панели элементов управления и перетащить его в нужное место формы.

Из панели элементов управления перетаскиваем элемент управления Label. Его обычно используют для вывода данных в определенное место формы. С помощью  Label сформируем запись вида a+b=

Для этого установим значение свойства Text метки Label1 равным a+b=.

Далее я буду писать в соответствии с синтаксисом языка C#

имя_объекта.свойство_объекта=значение свойства

label1.Text="a+b=". Обратите внимание значение свойства Text берется в кавычки для любого элемента управления, когда мы задаем его в программном коде. Если же мы задаем в окне Свойств (Properties), то кавычки не ставим.

Настроим в Label более крупный шрифт. Для этого щелкаем правой кнопкой мыши на Label и в открывшемся контекстном меню выбираем Свойства. Там находим свойство Font и изменяем его размер.

label1.FontSize=16

Шаг 2

Поместим на форму поле ввода. Для этого найдем слева в Панели элементов элемент TextBox.

В панели свойств установим для него шрифт

textBox1.FontSize=16

Шаг 3

Поместим на форму кнопку. Для этого найдем слева в Панели элементов элемент Button.

Шаг 4

Добавим поля в класс формы

//поля формы
int a, b;//слагаемые
int minValue, maxValue;//диапазон значений слагаемых

Любые объекты являются объектами определенного типа. Все наши поля объявлены как объекты целого типа.


Шаг 5

Для процедуры нажатия кнопки напишем код инициализирующий случайные числа для слагаемых примера. Для этого в дизайнере формы выполним двойной щелчок на кнопке Пуск. Система сгенерирует заготовку для обработки события нажатия на кнопку Пуск.

private void button1_Click(object sender, EventArgs e)
{
//Генерируем случайные числа
Random rnd1 = new Random();
a = rnd1.Next(minValue, maxValue);
b = rnd1.Next(minValue, maxValue);
}

Random rnd1 = new Random(); - создаем объект класса Random. Объекты этого класса после применения к ним метода Next порождают случайное число. Если мы используем такую реализацию метода Next

a = rnd1.Next(minValue, maxValue);

то переменная а может принять целое случайное число из промежутка от minValue  до maxValue. Если установить

minValue = 10;
maxValue = 100;

поле а может менять свое значение от 10 до 99 включительно. Метод Next имеет несколько реализаций. Я рассмотрел наиболее подходящую для нашей задачи. Более полную информацию смотрите здесь.

Шаг 6

В процедуре загрузки формы зададим диапазон чисел из которого можно брать слагаемые.

private void Form1_Load(object sender, EventArgs e)
{
minValue = 10;
maxValue = 100;
}

Шаг7

Вернемся в процедуру нажатия кнопки button1_Click. Надо вывести в label1 задание для пользователя.Так как свойство Text может принимать только строковые значения, надо преобразовать значения целого типа в значения строкового. Это можно сделать с помощью метода ToString унаследованного от класса Object как показано ниже

label1.Text = a.ToString() + "+" + b.ToString() + "=";

Шаг 8

Так как значение label1.AutoSize=True, то размер метки будет меняться так, чтобы весь текст вместился.

Если  label1.AutoSize=False, то размер метки будет неизменным, а лишний текст будет обрезаться. Нам это не подходит. Нам надо label1.AutoSize=True. Посмотрите в окне свойств. Но тогда может возникнуть наложение текстового поля на метку или наоборот. Чтобы решить эту проблему я написал одну строчку, учитывая что все элементы рисуются от левого верхнего угла. Нам надо менять label1.Left  в зависимости от размера метки label1.Width, в то время как положение textBox1 остается неизменным.

label1.Left = textBox1.Left - label1.Width;

Посмотрите на рисунок и вам станет ясно.

 

Шаг 9

Напишем процедуру нажатия кнопки Enter. Точнее процедуру отслеживающую нажатие кнопок клавиатуры. Нас пока интересует только Enter. Если пользователь нажал Enter, значит программа должна проверить правильность ввода. Эта процедура фактически является обработчиком события нажатия кнопки. Чтобы вызвать заготовку этого события надо в окне свойств для textBox1 щелкнуть на кнопке с изображением молнии. В отобразившемся списке событий делаем двойной щелчок на нужном событии, в нашем случае на KeyPress.

Посмотрим на заголовок процедуры

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

В процедуру обработки события в качестве параметров передаются
object sender - это объект порождающий событие. Нам он пока не нужен.
KeyPressEventArgs e - объект содержащий список входных и выходных аргументов события. Свойство KeyChar этого объекта содержит символ нажатой клавиши.

//если нажата Enter
if (e.KeyChar == (char)Keys.Enter) - здесь мы сравниваем символ нажатой клавиши e.KeyChar с одним из объектов перечисления Keys. Перечисление Keys входит в библиотеку классов .NET Framework и содержит коды всех кнопок/клавиш. Нас интересует клавиша Enter. Поскольку нет неявного преобразования типа enum к типу char, мы применили явное преобразование.

Как только нажата Enter, надо проверить правильность ввода. Хоть мы и вводим в текстовое поле число, но для системы это не численный тип, а строковый.Любой объект принадлежит к какому-либо типу. В выражениях типы должны быть согласованы между собой.

Для преобразования типов в библиотеке  классов .NET Framework существует класс Convert. Он имеет 15 статических методов, позволяющих выполнять различные преобразования. Мы используем преобразование к целому типу. Выражение Convert.ToInt32(textBox1.Text) преобразует строковое значение к целому типу.

{//проверяем правильность решения
if (a + b == Convert.ToInt32(textBox1.Text))
{  
//если  ответ правильный,
//Задаем следующий пример
//очищаем текстовое поле и устанавливаем на него курсор
textBox1.Text = "";
textBox1.Focus();

}
else
{//если  ответ не правильный
MessageBox.Show("Не правильно");
}

 

В следующих уроках в ветвь оператора if - else, обрабатывающую неправильный ответ, мы введем другой код. А пока объясню, что делает MessageBox.Show("Не правильно"); Она выводит небольшое окошко с  собщением "Не правильно". Здесь мы встретились с классом MessageBox (это окно сообщения) и его методом Show, его отображающим. Здесь мы использовали простейшую реализацию метода Show. Окно сообщения удобно использовать при разработке, например для отслеживания возникновения событий.

Шаг 10

Давайте зациклим программу, чтобы после нажатия Enter в случае правильного ответа выводился следующий пример. Для этого  в ветвь оператора if - else задающую следующий пример(см. Шаг 9) введите строку.

button1_Click(sender, e);

Здесь мы принудительно в коде вызываем процедуру нажатия кнопки Пуск. В результате выполнения этой команды запустится процедура button1_Click, которую мы рассмотрели на 5-ом шаге.


Подведем итоги

  • Мы узнали о таких свойствах элементов управления как Text, FontSize, AutoSize, Left, Width
  • Научились работать со случайными числами, узнали о классе Random, и его методе Next(minValue, maxValue)
  • Узнали как преобразовывать типы в операторах сравнения (==) и присваивания (=)
    • с помощью метода ToString() примененного к целому типу
    • и метода ToInt32 примененного к строковому типу. Любой объект принадлежит к какому-либо типу. В выражениях типы должны быть согласованы между собой.
    • Узнали о явном и неявном преобразовании. Неявное преобразование типов выполняется автоматически, явное используется когда невозможно неявное.
    • Узнали о классе Convert
  • Научились выводить текст в элемент управления во время выполнения программы.
  • Научились обрабатывать нажатие кнопок клавиатуры
  • Использовали оператор if - else.
  • Научились выводить окно с собщением.
  • Узнали как устанавливать фокус на объект (textBox1.Focus();)
  • Узнали как вызвать процедуру.

P.S. Последующие уроки выйдут, если наберется хотя бы 50 человек, которым интересно, что я рассказываю. Так что подписывайтесь, а если не интересно, то зачем я буду распинаться? Подписавшись вы будете знать, когда выйдет очередной урок.

Ваш e-mail: *
Ваше имя: *

Добавляю видеоотчет и исходный код того, что я тут наваял.

Продолжение ->

Comments   

#1 fusunlows 2011-08-08 06:26
Давно хочется ченить очень сподвигает все работает


__ __ __ __ __ __ __ __ __ __ __ __
скачать программу для телефона

бадья

страйкбол

Комедии смотреть онлайн бесплатно

Добавить стихотворение
Quote

Add comment


Security code
Refresh