Назад Уперед Зміст


ЗАВДАННЯ

  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. ПИТАННЯ

    Назад Уперед Зміст