Назад Вперед Содержание


ЗАДАЧИ

  1. ЗАДАЧИ ДЛЯ НАЧИНАЮЩИХ
  2. ЗАДАЧИ ДЛЯ СТУДЕНТОВ, ЗНАКОМЫХ С С#
  3. ВОПРОСЫ

ПРИМЕР 1

Проект "Продажа репродукций картин", реализация двумя способами

Создать проект, состоящий из трех форм:

  1. Нажать кнопку "Вход", ввести логин, если пользователь не был зарегистрирован, откроется кнопка "Регистрируйтесь"
  2. Заполнить вторую форму.
  3. Снова нажать кнопку "Вход", ввести логин и пароль, если пользователь ввел все правильно, откроется форма3.

Передачу данных между формами осущесвить двумя способами.

Диаграмма классов проекта должна выглядеть так:

Реализация

1 способ передачи данных для всех трех форм:

Создаем проект WFApp1. Добавляем два класса User и Reg.

public class User
    {
        public string name;
        public string login;
        public string password;
        public User(string n, string l, string p)
        {
            this.name = n;
            this.login = l;
            this.password = p;
        }
    }

Второй класс статический для обмена данными между формами.

List - класс

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WFApp1
{
    public static class Reg
    {
        public static User curent;
        public static List users = new List(); 
        
    }
}

Проект содержит три формы.

Главная форма содержит компоненты:

  1. кнопка "Вход" - BeginBtn;
  2. метка "Введите логин" - label1 ;
  3. метка "Введите пароль" - label2 ;
  4. текстовое поле " логин" - textBox1;
  5. текстовое поле " пароль" - textBox2;
  6. кнопка "Авторизируйтесь" - this.button1;
  7. кнопка "Регистрируйтесь" -this.button2 ;
  8. кнопка "Выход" -this.button3;
  9. Компонент для вsвода даты-dateTimePicker1 ;

Класс mainForm содержит методы обработки событий.

При загрузке формы все компоненты, кроме кнопки вход не активны. И заполняем список зарегистрированных пользователей users типа List.

private void mainForm_Load(object sender, EventArgs e)
        {          
            this.textBox1.Enabled = false;
            this.textBox2.Enabled = false;
            this.button1.Enabled = false;
            this.button2.Enabled = false;
            User u1 = new User("Ivanov","admin","admin");
            Reg.users.Add(u1);//Добавляет объект в конец очереди List.
            User u2 = new User("Petrov", "user2", "user2");
            Reg.users.Add(u1);
            User u3 = new User("Sidorov", "user3", "user3");
            Reg.users.Add(u3);
        }

При нажатии на кнопку вход поля ввода логина и пароля становятся доступными для ввода.

private void BeginBtn_Click(object sender, EventArgs e)
        {
            this.textBox1.Enabled = true;
            this.textBox2.Enabled = true;
            this.button1.Enabled = true;
        }

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

       
        private void button2_Click(object sender, EventArgs e)
        {
            this.button2.Enabled = false;
            Form2 f2 = new Form2();
            f2.Show();
            this.Hide();
        }

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

      
        private void button1_Click(object sender, EventArgs e)
        {
            foreach (User ingredient in Reg.users)
            {
                if (ingredient.login.Equals(textBox1.Text))
                {
                    if (ingredient.password.Equals(textBox2.Text))
                    {
                        this.Hide();Reg.curent = new User(ingredient.name,ingredient.login,ingredient.password);
                        Form3 f3 = new Form3(); 
                        f3.Show();break; 
                    }
                    else 
                     {
                          MessageBox.Show("Не правильно введен пароль");break;
                    }
                }                   
            }
            this.textBox1.Enabled = false;
            this.textBox2.Enabled = false;
            this.button1.Enabled = false;
            this.button2.Enabled = true;
          }
        private void button3_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

Форма регистрации пользователя:

  1. кнопка "Зарегистрировать" - button1 ;
  2. метка "Введите имя" - label1 ;
  3. метка "Введите логин" - .label2;
  4. метка "Введите пароль" - .label3 ;
  5. метка "Повторить пароль" - label4;
  6. текстовое поле " имя" -textBox1;
  7. текстовое поле " логин" -textBox2;
  8. текстовое поле " пароль" -textBox3;
  9. текстовое поле " повтор" -textBox4 ;

Класс Form2 содержит методы обработки событий.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WFApp1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (this.textBox3.Text.Equals(this.textBox4.Text))
            {
                User us = new User(this.textBox1.Text, this.textBox2.Text, this.textBox3.Text);
                Reg.users.Add(us);
            }
            else
                MessageBox.Show("Не совпадает повторный пароль!!!");
                mainForm f1 = new mainForm();
                f1.Show(); this.Close();
        }
    }
}

Форма заказа репродукций:

  1. кнопка "Вычислить" -button1;
  2. текстовое поле " количество" -textBox1;
  3. текстовое поле " цена" - this.textBox2 ;
  4. текстовое поле " скидка" - this.textBox3;
  5. метка "Количество репродукций" -label1;
  6. метка "Цена" -label2;
  7. метка "Скидка" -label3;
  8. метка "К оплате" -label4;
  9. таймер -timer1 ;
  10. метка "оплата" -label5;
  11. кнопка "Выйти"-button2 ;
  12. кнопка "Выбор папки"-button3;
  13. компонент для отображения картинки-pictureBox1;
  14. поле метки голубое для отображения папки -label7;
  15. список-listBox1;

Класс Form3 содержит методы обработки событий.

using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
namespace WFApp1
{
    public partial class Form3 : Form
    {
        private int pbw, pbh;
        int sek = 0;
        public Form3()
        {
            InitializeComponent();
        }
        
        private void Form3_Load(object sender, EventArgs e)
        {
            pbw = pictureBox1.Width;
            pbh = pictureBox1.Height;
            listBox1.Sorted = true;
            FillListBox(Application.StartupPath + "\\");
            this.Text = "Зашел пользователь " + Reg.curent.name + " login: " + Reg.curent.login;
            timer1.Start();
        }

private Boolean FillListBox(String aPath)
        {
            DirectoryInfo di = new DirectoryInfo(aPath);
            FileInfo[] fi = di.GetFiles("*.jpg");
            listBox1.Items.Clear();
            foreach (FileInfo fc in fi)
            {
                listBox1.Items.Add(fc.Name);
            }
            label7.Text = aPath;
            if (fi.Length == 0) return false;
            else
                listBox1.SelectedIndex = 0;
            return true;
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            sek++;this.label6.Text = sek.ToString();                   
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.timer1.Stop();
            this.label5.Text =(Convert.ToDouble(this.textBox1.Text) * Convert.ToDouble(this.textBox2.Text) - Convert.ToDouble(this.textBox3.Text)).ToString();
                   }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            String tx = " ";
            char c = e.KeyChar;
            tx = (sender as TextBox).Text;
            if (!Char.IsDigit(e.KeyChar) && !(Char.IsControl(e.KeyChar)))
                if (!((e.KeyChar.ToString() == ",") && (tx.IndexOf(",") == -1))) e.Handled = true;
        }

FolderBrowserDialog — это обычная форма, а значит метод ShowDialog будет возвращать перечисление DialogResult. В нашем случае если пользователь в окне выбора папки, нажмет кнопку «Отмена», то метод вернет DialogResult.Cancel, если же папку выберут и нажмут «ОК», то DialogResult.OK. Таким образом наше условие, показывает нам выбранный путь только тогда, когда мы выбрали нужную директорию и нажали кнопку «ОК».По умолчанию окно FolderBrowserDialog позволяет создать новую папку «налету». Для того чтобы убрать данную возможность, перед вызовом метода ShowDialog необходимо задать свойство ShowNewFolderButton = false.

       private void button3_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fb = new FolderBrowserDialog();
            fb.Description = "Выберите папку";
            fb.ShowNewFolderButton = false;
            if (fb.ShowDialog() == DialogResult.OK)
                if (!FillListBox(fb.SelectedPath + "\\")) pictureBox1.Image = null;
        }
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Double mh, mw;
            pictureBox1.Image = new Bitmap(label7.Text + listBox1.SelectedItem.ToString());
            if ((pictureBox1.Image.Width > pbw) || (pictureBox1.Image.Height > pbh))
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                mh = (double)pbh / (double)pictureBox1.Image.Height;
                mw = (double)pbw / (double)pictureBox1.Image.Width;
                if (mh < mw)
                {
                    pictureBox1.Width = Convert.ToInt16(pictureBox1.Image.Width * mh);
                    pictureBox1.Height = pbh;
                }
                else
                {
                    pictureBox1.Width = pbw;
                    pictureBox1.Height = Convert.ToInt16(pictureBox1.Image.Height * mw);

                }
            }
            else
                if (pictureBox1.SizeMode == PictureBoxSizeMode.StretchImage)
                pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
        }
    }
}

2 способ передачи данных для всех трех форм:

Главная форма:

Форма регистрации пользователя:

Форма заказа репродукций:

Результат:

  1. Нажать кнопку "Вход", ввести логин, если пользователь не был зарегистрирован, откроется кнопка "Регистрируйтесь"
  2. Заполнить вторую форму.
  3. Снова нажать кнопку "Вход", ввести логин и пароль, если пользователь ввел все правильно, откроется форма3.

ПРИМЕР 2

Объект Chart используют для создания графиков и диаграмм.

Для реализации данной задачи необходимо создать главное меню (объект типа MenuStrip) с командами: завершить работу, табулировать функцию, очистить поля вывода результатов и контекстное меню (ContextMenuStrip), которое содержит команду очистки поля вывода результатов. Результат табулирования вывести в многострочное поле редактирования (объект типа RichTextBox). Предусмотреть возможность вывода результатов на экран, файл, массив. Способ вывода результатов реализовать с помощью флажков (объекты типа CheckBox), расположенных на панели группы объектов (GroupBox)

Последовательность выполнения:

  1. Создайте проект TabGraph.
  2. Измените название формы на «Табулирование функции» и увеличить ее размеры в вертикальном направлении.
  3. Расположите на форме поля редактирования TextBox1, TextBox2, TextBoxt3 и соответствующие им текстовые поля «Левая граница», «Правая граница», «Шаг» и текстовое поле вида функции y=sin(x)+1.

    Для настройки свойств графика необходимо выбрать пункт Свойства контекстного меню компонента Chart1.

    Код обработчиков событий .

    Результат:

    ЗАДАЧИ

    1. ЗАДАЧИ ДЛЯ НАЧИНАЮЩИХ
    2. ЗАДАЧИ ДЛЯ СТУДЕНТОВ, ЗНАКОМЫХ С С#
    3. ВОПРОСЫ

    Назад Вперед Содержание