Методичка по C (Методичка по C#), страница 11

2015-08-02СтудИзба

Описание файла

Документ из архива "Методичка по C#", который расположен в категории "". Всё это находится в предмете "системное и прикладное программное обеспечение (сппо)" из 6 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "системное и прикладное программное обеспечение (сппо)" в общих файлах.

Онлайн просмотр документа "Методичка по C"

Текст 11 страницы из документа "Методичка по C"

FormA.Enabled = false; //закроем пункт меню

f4.f1 = this; // передаем адрес главного окна в Form4

f4.Show();

}

При закрытии пункт меню Единственная форма ( его имя FormA) должен быть снова освобожден. Тонкость в следующем: форму можно закрыть несколькими способами: нажатием на командную кнопку, нажатием на кнопку , через системное меню и т.д. В любом случае пункт меню должен быть разблокирован. Для этого используем событие, связанное с закрываемым окном: FormClosed (происходит после закрытия) или FormClosing (происходит до закрытия). В нашем случае можно использовать любое из них. Найдем нужное событие в списке, сделаем на его имени двойной щелчок и напишем реализацию:

private void Form4_FormClosed(object sender, FormClosedEventArgs e)

{

f1.FormA.Enabled = true;

}

В MDI-приложениях возможно изменение меню в главном окне при открытии того или иного подчиненного окна. Для этого создаем меню в подчиненном окне. При открытии этого окна оно соединяется с меню главного окна.

Контрольные вопросы

  1. Какие диалоговые средства для управления работой программой Вы знаете?

  2. Какие способы представления массивов на формах Вы знаете? Каковы их преимущества и недостатки?

  3. Проанализируйте отличия MDI- и SDI-приложений.

5. Объектно-ориентированное программирование в Microsoft Visual Studio 2005

В предыдущих главах мы рассмотрели, как писать программы на C# (по процедурной и объектно-ориентированной методикам), а также как создать интерфейс средствами Microsoft Visual Studio 2005. Рассмотрим в этой главе, как объединить в одно целое все изложенное выше: как построить программы для решения прикладных задач и как построить интерфейс для них. Имеются следующие возможности, которые мы по очереди рассмотрим.

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

  2. Создать отдельные классы для решения прикладных задач, предусмотрев в их методах (в том числе и в конструкторах) формальные параметры и возвращаемые значения для взаимодействия с интерфейсом. Чтение (запись) данных из интерфейса (в интерфейс) и их передача в методы обеспечивается средствами Visual Studio.

  3. Передать в классы прикладных задач указатели на формы (или на компоненты на форме); чтение (запись) данных из форм осуществляется методами классов.

  4. В методах классов прикладной задачи предусмотреть открытие форм для ввода/вывода.

5.1. Дополнение класса формы средствами решения прикладной задачи

Пусть задана задача: какое количество элементов одномерного массива меньше его среднего арифметического. В классе Form1 имеются объявление данных, а также функции для решения задачи. Вызов функций выполняется при нажатии на командные кнопки. Форма для этой задачи представлена на рис. 5.1.

Класс Form1:

namespace Exampl_51

{

public partial class Form1 : Form

{

double[] x; // данные для задачи

int kol;

double SrAr;

public Form1()

{

InitializeComponent();

}

Рис. 5.1

private void button4_Click(object sender, EventArgs e)

{

Close();

}

private void Input()

{ // ввод исходных данных

string[] temp;

string dan;

dan = textBox1.Text;

temp = dan.Split(';');

x = new double[temp.Length];

for (int i = 0; i < x.Length; i++)

x[i] = Convert.ToDouble(temp[i]);

}

private void Comp_aver()

{ // нахождение среднего арифметического

SrAr = 0;

for (int i = 0; i < x.Length; i++)

SrAr += x[i];

SrAr = SrAr / x.Length;

}

private void Comp_Count()

{// определение требуемого количества элементов

kol = 0;

for (int i = 0; i < x.Length; i++)

if (x[i] < SrAr) kol++;

}

private void button1_Click(object sender, EventArgs e)

{ // реализация кнопки ввода исходных данных

Input();

Sred.Enabled = true;

}

private void Sred_Click(object sender, EventArgs e)

{ // реализация кнопки нахождения среднего арифметического

Comp_aver();

KolVo.Enabled = true;

}

private void KolVo_Click(object sender, EventArgs e)

{ //нахождение и вывод количества

Comp_Count();

label3.Text = "" + kol;

}

private void textBox1_Click(object sender, EventArgs e)

{// перевод задачи в исходное состояние

textBox1.Text = "";

Sred.Enabled = false;

KolVo.Enabled = false;

label3.Text = "";

} } }

Первоначально кнопки «Среднее арифметическое» и «Количество» заблокированы, потому что до ввода исходных данных на них нажать нельзя. Щелчок мышью на строке ввода исходных данных переводит программу в исходное состояние.

5.2. Создание отдельных классов

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

Создавать классы можно двумя способами:

  • написать классы самому «с нуля»; не забудьте, что класс формы должен быть впереди собственных классов;

  • поставить курсор мыши на имя проекта, нажать на правую клавишу, выбрать из выпадающего меню пункт «Add», далее «Class».

namespace Klassid

{

public class Cl1

{

protected int a1 = 0;

protected double a2 = 3.5;

private Cl3 _Cl3;

public Cl1(int i, double x)

{

a1 = i;

a2 = x;

}

public string opp()

{

_Cl3 = new Cl3("Greeting from Moscow");

return _Cl3.get_c1();

}

public double op2()

{

return (a1*a2);

}

}

public class Cl2 : Cl1

{

public string st1;

public Cl2(int i, double x, string s)

: base(i, x)

{

st1 = s;

}

public string op21()

{

return st1;

}

}

public class Cl3

{

public string c1;

public Cl3(string t)

{

c1 = t;

}

public string get_c1()

{

return c1;

}

}

public class Cl4

{

public int i1;

public Cl4(int k)

{

i1 = k;

}

public int fun2()

{

return i1;

}

}

class Cl5 // обработка массива

{

int[] k;

public Cl5(int[] temp)

{

k = new int[temp.Length];

for (int i = 0; i < temp.Length; i++)

k[i] = temp[i];

}

public int sum_pol()

{

int u=0;

for (int i = 0; i < k.Length; i++)

if (k[i] > 0) u += k[i];

return u;

}

} }

Работа с классами из формы:

namespace Klassid

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

private void button2_Click(object sender, EventArgs e)

{// создание объекта класса Cl3

Cl3 pp = new Cl3(textBox1.Text);

textBox2.Text = pp.get_c1();

}

private void button3_Click(object sender, EventArgs e)

{ // работа с классом Cl2

Cl2 q;

string s1;

s1 = textBox1.Text;

q = new Cl2(6, 2.5, s1);

textBox2.Text = q.st1;

}

private void button4_Click(object sender, EventArgs e)

{ // работа с классом Cl2

Cl2 q;

string s1;

int i;

s1 = textBox1.Text;

i=Convert.ToInt32(textBox2.Text);

q=new Cl2(i,2.5,s1);

textBox2.Text=Convert.ToString(q.op21());

}

private void button5_Click(object sender, EventArgs e)

{// работа с классом Cl1, а через него с Cl3

Cl1 f1 = new Cl1(5, 3.7);

textBox1.Text = f1.opp();

}

private void button6_Click(object sender, EventArgs e)

{// обработка массива

string[] z;

string s1;

int[] t;

s1 = textBox1.Text;

z = s1.Split(';');

t=new int[z.Length];

for (int i = 0; i < z.Length; i++)

t[i] = Convert.ToInt32(z[i]);

Cl5 My_Cl = new Cl5(t);

textBox2.Text = "Summa " + My_Cl.sum_pol();

}

} }

5.3. Передача в классы указателей на формы

Рассмотрим в этом разделе использование в числе данных класса указателя на форму для обеспечения возможности связывания переменных класса и компонентов на форме. Напомним, что форме соответствует класс, и все компоненты формы являются и переменными ее класса. Переменные класса, по умолчанию, имеют атрибут доступа private. Поэтому не забудьте: если хотите организовать доступ к компонентам формы по указателю извне, необходимо изменять атрибут доступа (свойство Modifiers) этих компонентов.

Рассмотрим следующий пример: найти среднее арифметическое тех элементов одномерного массива, которые больше заданного значения. Пусть наше приложение состоит из одной формы, на которой имеются две строки редактирования (textBox1 – исходный массив, textBox2 – заданное значение), метка для вывода результата (label4). Значение свойства Modifiers для всех перечисленных компонентов должно быть public. Кроме того, там имеются три командных кнопки (button1, button2, button3).

Класс пользователя:

public class Class1

{

int[] k; // исходный массив

double d; // среднее арифметическое

int predel=0,kol; // заданное значение, количество элементов

Form1 ff; // указатель на форму

public Class1(Form1 f1)

{

ff = f1; // конструктор сохраняет значение указателя

}

public void input()

{

//ввод исходных данных, пустое поле считается нулем

string[] s1; string s2;

s2 = ff.textBox1.Text;

s1 = s2.Split(';');

k = new int[s1.Length];

for (int i = 0; i < s1.Length; i++)

if (s1[i] == "") k[i] = 0;

else

k[i] = Convert.ToInt32(s1[i]);

if (ff.textBox2.Text == "") predel = 0;

else

predel = Convert.ToInt32(ff.textBox2.Text);

}

public void obr()

{

// нахождение среднего арифметического

d = 0;

for (int i = 0; i < k.Length; i++)

if (k[i] > predel)

{

d += k[i];

kol++;

}

if (kol != 0)

d /= kol;

}

public void output()

{

// вывод результата

if (kol == 0) ff.label4.Text = "No numbers";

else

ff.label4.Text = "" + d;

} } }

В класс пользователя передается указатель на форму, на которой имеются компоненты для исходных данных и результата. Методы класса пользователя осуществляют ввод/вывод и обработку.

Методы формы:

namespace ClassForm

{

public partial class Form1 : Form

{

Class1 my; // указатель на класс пользователя

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{ // создание класса пользователя

my = new Class1(this);//передача указателя на

//текущую (в нашем случае на главную) форму

button2.Enabled = true;

button1.Enabled = false;

}

private void button2_Click(object sender, EventArgs e)

{ // ввод, вычисления и вывод результата

my.input();

my.obr();

my.output();

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5259
Авторов
на СтудИзбе
421
Средний доход
с одного платного файла
Обучение Подробнее