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



 

Рассмотрим в этом параграфе использование в числе данных класса указателя на форму для обеспечения возможности связывания переменных класса и компонентов на форме. Напомним, что форме соответствует класс, и все компоненты формы являются и переменными ее класса. Переменные класса, по умолчанию, имеют атрибут доступа 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();

  } 

   private void button3_Click(object sender, EventArgs e)

   {

       Close();

   }        }        }

Примечанияотносительно метода button1_Click:

  1. До создания класса невозможны ввод данных и вычисления, поэтому кнопка вычислений заблокирована.
  2. Предусмотрена возможность создания лишь одного объекта типа Class1. Поэтому после его создания кнопка создания класса заблокируется.
  3. Возможны многократный ввод исходных данных и вычисления.

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

 

Создание форм в классах пользователя

 

Рассмотрим в этом параграфе создание и открытие форм для ввода/вывода из самих классов пользователя. Для этого создадим три формы: одну для управления работы приложением и две для ввода/вывода. Они представлены на рис. 5.2 – 5.4.

Рис.5.3

 

Рис. 5.3.

 

 

Рис. 5.4

 

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

namespace KlassVorm

{

public class cl_a

{

    protected string s1;

    protected int i;

    public cl_a()

    {            

         Form2 f2; //создание формы для ввода данных

         f2=new Form2();

    f2.ShowDialog();

    s1=f2.textBox1.Text; // ввод исходных данных

         i=Convert.ToInt32(f2.textBox2.Text);          

    } }        }

namespace KlassVorm

{   

public class cl_b : KlassVorm.cl_a

{

    protected double x,z;

    public cl_b()

    {

         Form3 f3; //создание формы для ввода данных

         f3=new Form3();

         f3.ShowDialog();

         x=Convert.ToDouble(f3.textBox1.Text);

    }

    public void compute()

    {

    z=i*x;

         Form3 f3; // создаине формы для вывода данных

         f3=new Form3();

         f3.textBox1.Text=s1;

         f3.textBox2.Text=" "+z;


Дата добавления: 2018-04-05; просмотров: 349; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!