Для настройки отклика приложения на действия пользователя необходимо создать обработчики событий для тех компонент интерфейса, которыми будет манипулировать пользователь. Обработчик события для выделенного компонента создаётся с помощью окна «Свойства» закладки «События». Правее выбранного события в свободном поле необходимо сделать двойной клик мышью и в классе формы появится текст шаблона обработчика этого события. Затем вам необходимо описать в обработчике необходимые вам действия. Обработчики событий для компонентов главной формы приведены в таблице 7.
Таблица 7 - Обработчики событий для компонентов главной формы
|
Имя компонента |
Событие |
Обработчик |
|
TPanelp_p (главная форма) |
Load |
TPanelp_p_Load |
|
TPanelp_p (главная форма) |
KeyDown |
TPanelp_p_KeyDown |
|
TPanelp_p (главная форма) |
KeyPress |
TPanelp_p_KeyPress |
|
trackBar1 |
Scroll |
trackBar1_Scroll |
|
trackBar2 |
Scroll |
trackBar1_Scroll |
|
numericUpDown1 |
ValueChanged |
numericUpDown1_ValueChanged |
|
numericUpDown2 |
ValueChanged |
numericUpDown1_ValueChanged |
|
button1 – button19 |
Click |
button_Click |
|
выходToolStripMenuItem |
Click |
выходToolStripMenuItem_Click |
|
историяToolStripMenuItem |
Click |
историяToolStripMenuItem1_Click |
|
справкаToolStripMenuItem |
Click |
справкаToolStripMenuItem_Click |
Теперь можно запустить приложение и протестировать работу командных кнопок для ввода цифр действительного числа, представленного в выбранной системе счисления. А также для изменения оснований систем счисления исходного числа и результата. Ниже приведён текст модуля главного окна приложения.
namespace Конвертор
{
public partial class Form1 : Form
{
//Объект класса Управление.
Control_ ctl = new Control_();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
label1.Text = ctl.ed.Number;
//Основание с.сч. исходного числа р1.
trackBar1.Value = ctl.Pin;
//Основание с.сч. результата р2.
trackBar2.Value = ctl.Pout;
label3.Text = "Основание с. сч. исходного числа " + trackBar1.Value;
label4.Text = "Основание с. сч. результата " + trackBar2.Value;
label2.Text = "0";
//Обновить состояние командных кнопок.
this.UpdateButtons();
}
//Обработчик события нажатия командной кнопки.
private void button1_Click(object sender, EventArgs e)
{
//ссылка на компонент, на котором кликнули мышью
Button but = (Button)sender;
//номер выбранной команды
int j = Convert.ToInt16(but.Tag.ToString());
DoCmnd(j);
}
//Выполнить команду.
private void DoCmnd(int j)
{
if (j == 19) { label2.Text = ctl.DoCmnd(j); }
else
{
if (ctl.St == Control_.State.Преобразовано)
{
//очистить содержимое редактора
label1.Text = ctl.DoCmnd(18);
}
//выполнить команду редактирования
label1.Text = ctl.DoCmnd(j);
label2.Text = "0";
}
}
//Обновляет состояние командных кнопок по основанию с. сч. исходного числа.
private void UpdateButtons()
{
//просмотреть все компоненты формы
foreach (Control i in this.Controls)
{
if (i is Button)//текущий компонент - командная кнопка
{
int j = Convert.ToInt16(i.Tag.ToString());
if (j < trackBar1.Value)
{
//сделать кнопку доступной
i.Enabled = true;
}
if ((j >= trackBar1.Value) && (j <= 15))
{
//сделать кнопку недоступной
i.Enabled = false;
}
}
}
}
//Изменяет значение основания с.сч. исходного числа.
private void trackBar1_Scroll(object sender, EventArgs e)
{
numericUpDown1.Value = trackBar1.Value;
//Обновить состояние командных кнопок.
this.UpdateP1();
}
//Изменяет значение основания с.сч. исходного числа.
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
//Обновить состояние.
trackBar1.Value = Convert.ToByte(numericUpDown1.Value);
//Обновить состояние командных кнопок.
this.UpdateP1();
}
//Выполняет необходимые обновления при смене ос. с.сч. р1.
private void UpdateP1()
{
label3.Text = "Основание с. сч. исходного числа " + trackBar1.Value;
//Сохранить р1 в объекте управление.
ctl.Pin = trackBar1.Value;
//Обновить состояние командных кнопок.
this.UpdateButtons();
label1.Text = ctl.DoCmnd(18);
label2.Text = "0";
}
//Изменяет значение основания с.сч. результата.
private void trackBar2_Scroll(object sender, EventArgs e)
{
//Обновить состояние.
numericUpDown2.Value = trackBar2.Value;
this.UpdateP2();
}
//Изменяет значение основания с.сч. результата.
private void numericUpDown2_ValueChanged(object sender, EventArgs e)
{
trackBar2.Value = Convert.ToByte(numericUpDown2.Value);
this.UpdateP2();
}
//Выполняет необходимые обновления при смене ос. с.сч. р2.
private void UpdateP2()
{
//Копировать основание результата.
ctl.Pout = trackBar2.Value;
//Пересчитать результат.
label2.Text = ctl.DoCmnd(19);
label4.Text = "Основание с. сч. результата " + trackBar2.Value;
}
//Пункт меню Выход.
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
//Пункт меню Справка.
private void справкаToolStripMenuItem_Click(object sender, EventArgs e)
{
AboutBox1 a = new AboutBox1();
a.Show();
}
//Пункт меню История.
private void историяToolStripMenuItem1_Click(object sender, EventArgs e)
{
Form2 history = new Form2();
history.Show();
if (ctl.his.Записей() == 0)
{
history.textBox1.AppendText("История пуста");
return;
}
//Ообразить историю.
for (int i = 0; i < ctl.his.Записей(); i++)
{
history.textBox1.AppendText(ctl.his[i].ToString());
}
}
//Обработка алфавитно-цифровых клавиш.
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
int i = -1;
if (e.KeyChar >= 'A' && e.KeyChar <= 'F') i = (int)e.KeyChar - 'A' + 10;
if (e.KeyChar >= 'a' && e.KeyChar <= 'f') i = (int)e.KeyChar - 'a' + 10;
if (e.KeyChar >= '0' && e.KeyChar <= '9') i = (int)e.KeyChar - '0';
if (e.KeyChar == '.') i = 16;
if ((int)e.KeyChar == 8) i = 17;
if ((int)e.KeyChar == 13) i = 19;
if ((i < ctl.Pin)||(i >= 16)) DoCmnd(i);
}
//Обработка клавиш управления.
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
//Клавиша Delete.
DoCmnd(18);
if (e.KeyCode == Keys.Execute)
//Клавиша Execute Separator.
DoCmnd(19);
if (e.KeyCode == Keys.Decimal)
//Клавиша Decimal.
DoCmnd(16);
}
}
}
Задание.
Текст программы.
Тестовые наборы данных для тестирования методов класса.
Назначения компонентов класса Button?
Назначения компонентов класса Label?
Назначения компонентов класса TextBox?
Назначения компонентов класса TrackBar?
Назначения компонентов класса numericUpDown?
Когда возникает событие Load?
Когда возникает событие Click?
Когда возникает событие Scroll?
Когда возникает событие ValueChanged?
Когда возникает событие KeyPress?
Когда возникает событие KeyDown?