Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Виконання роботи

Читайте также:
  1. I. ЗАГАЛЬНІ ВКАЗІВКИ ЩОДО ОРГАНІЗАЦІЇ САМОСТІЙНОЇ РОБОТИ
  2. Алгоритм роботи лікаря бригади швидкої медичної допомоги, що прибуває першою на місце катастрофи
  3. б) вид соціальної діяльності, спрямований на залучення різних соціальних інститутів до роботи з клієнтами.
  4. Безопасность функционирования автоматизированных и роботизированных производств.
  5. БУДОВА І ПРИНЦИП РОБОТИ ЛІЧИЛЬНИКА МОЛОКА УЗМ-1.
  6. В. Розгляд основних правил роботи з мультимедійними програмами (8 хвилин).
  7. Вибір теми варіанту курсової роботи

Київський технікум електронних приладів

 

 

Лабораторна робота №9

з дисципліни «Інструментальні зазоби візуального програмування»

 

 

на тему

 

«Розширення можливостей таблиці»

 

Мета роботи

- додання можливості змінити дані абітурієнтів;

- додання контекстного меню;

- розширення можливостей авторизації;

- створення форми «Інформація про студента»;

- можливість видалення виділених абітурієнтів.

 

Матеріали для засвоєння

1) Робота з контекстним меню;

2) Зміна даних шляхом перезапису файлів;

3) Робота з tabControl;

4) Робота з бінарними файлами.

 

Виконання роботи

Створення проекту

Створюємо новий проект Lab5та замінюємо файли з попереднього проекту, як було показано раніше.

 

Створення форми «Інформація про студента»

Якщо при реєстрації абітурієнта була допущена помилка, то її необхідно виправити. Для цього необхідно створити форму, на якій би компактно розміщувалася уся інформація про абітурієнта з можливістю її редагування та збереження. Створимо форму 12:

 

Інформація про студента

 

Дана форма містить tabControl, який можна знайти в Toolbox/Containers. Це елемент, який містить вкладки та може компактно розмістити у собі багато інформації.

Щоб додати сторінки до tabControl необхідно використати властивість tabpages, де відбувається редагування сторінок. Поля сторінок такі самі, як і на формах з реєстрацією.

 

Дана форма буде визиватися з форми 8 при подвійному кліку на потрібному абітурієнті, тому необхідно додати до форми 8 обробник RowHeaderMouseDoubleClick:

 

privatevoid dataGridView1_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)

{

DataTable dat = (DataTable)dataGridView1.DataSource; //get table

StreamWriter sr = File.CreateText("temp.av"); //create temp file

//copy index of current abiturient to file

sr.WriteLine(dat.Rows[e.RowIndex][0].ToString());

sr.Close();

Form12 f = newForm12();

f.Show(); //show abiturient information form

}

Нам необхідно, щоб індекс абітурієнта передався з 8-мої форми до 12-тої. Це можна зробити через тимчасовий файл “temp.av”. Тоді при загрузці форми 12 ми будемо знати, про якого абітурієнта йде мова:

 

privatevoid Form12_Load(object sender, EventArgs e)

{

StreamReader sr1; //file reader

string s; //temporary

Restore(); //restore information

if (File.Exists("Avt.txt") == true) //pin entered

{

sr1 = File.OpenText("Avt.txt"); //open file

s = sr1.ReadLine(); //read line

sr1.Close();

if (String.Compare(s, ReturnPin()) == 0) //pin entered correct

{

autor = true; //autorise

}

}

 

if (autor == false)

button1.Visible = false;

else

button1.Visible = true;

}

У функції Restore() буде відкриватися тимчасовий файл “temp.av”, зчитуватись індекс абітурієнта та видалятися. Потім інформацію про даного абітурієнта з головного файлу необхідно зчитати та заповнити поля форми.

Після відновлення інформації необхідно перевірити, чи є користувач авторизованим. Якщо ні, то він не зможе змінювати інформацію, а, отже, кнопка «Зберегти» йому буде недоступна.

Якщо користувач авторизований, то при натисненні на кнопку «Зберегти» необхідно замінити усі рядки головного файлу на поля форми. Це можна зробити переписавши головним файл зі зміненим абітурієнтом до тимчасового файлу, а потім їх замінити.

 

Зауваження: після початку операцій з файлами, що потребують багато часу, необхідно ховати натиснену кнопку для передбачення помилок. Після завершення операцій необхідно робити повідомлення та повертати кнопку на місце:

 

Також, як і в попередніх прикладах, необхідно заборонити допущення логічних помилок за допомогою обробників на відповідні checkbox(вибір денної та заочної форми навчання одночасно).

 

Розширення можливостей авторизації

У попередньому проекті ми видаляли файл "Avt.txt" з pin-кодом, тому авторизація зберігалася лише протягом перебування на формі 8. Якщо ми будемо видаляти цей файл в кінці роботи з програмою, то авторизуватися необхідно буде лише 1 раз.

Також, можна буде звертатися до цього файлу з інших форм, як це було зроблено в попередньому розділі.

 

Додання контекстного меню до таблиці

Контекстне меню можна знайти у Toolbox/Menus&Toolbars/ContextMenuStrip. При додання меню до форми, воно не буде зв’язуватись з таблицею, тому необхідно зробити це самим: у властивостях таблиці змінити поле contextMenuStrip. Тепер наше меню буде прив’язане до таблиці і виникати тільки в рамках таблиці.

Наше контекстне меню буде виглядати наступним чином:

 

Додати нові елементи до меню можна за допомогою властивості Collection,також прив’язати певну клавішу до того чи іншому підменю.

Тут «Delete» буде відповідати за видалення виділених абітурієнтів, а «Lookinformation» буде відкривати вікно «Інформація про студента» для 1 або декількох абітурієнтів.

Треба зазначити, що підпункт «Delete» не буде доступний без авторизації. Також обидва пункти не будуть доступні без виділення хоча б 1 строки. Щоб реалізувати ці ситуації необхідно додати обробник подій contextMenuStrip1_Opening:

 

privatevoid contextMenuStrip1_Opening(object sender, CancelEventArgs e)

{

bool flag = false; //no rows selected

for (int i = 0; i < dataGridView1.Rows.Count; i++) //for each row

if (dataGridView1.Rows[i].Selected == true) //row selected

{

flag = true; //some rows selected

break;

}

if (flag == false) //if no rows selected, so no menu available

{

DeleteToolStripMenuItem.Enabled = false;

lookInformationToolStripMenuItem.Enabled = false;

}

elseif (autor == false) //if no autorize

{

DeleteToolStripMenuItem.Enabled = false;

lookInformationToolStripMenuItem.Enabled = true;

}

elseif (autor==true) //if autorise complete

{

DeleteToolStripMenuItem.Enabled = true;

}

}

Тоді при відкриті меню, будуть перевірятися відповідні умови і активізуватися ті чи інші підпункти.

 

Залишилося прописати обробники подій для підпунктів. «Lookinformation» буде лише відкривати форму 12 методом Show() та передавати індекс абітурієнта за допомогою тимчасового файлу, а підпункт «Delete» повинен містити методи для видалення абітурієнта та обновлення таблиці:

 

privatevoid DeleteToolStripMenuItem_Click(object sender, EventArgs e)

{

DataTable dat = (DataTable)dataGridView1.DataSource; //get table

string str; //working string

bool flag = false; //none of rows

int del = 0; //number of abiturients was deleted

 

if (MessageBox.Show("Після видалення інформацію не можна буде повернути\nПродовжити

виконання операції?", "Info",

System.Windows.Forms.MessageBoxButtons.YesNo, //messageboxshow

System.Windows.Forms.MessageBoxIcon.Exclamation) == DialogResult.Yes)

flag = true;

 

if (flag == true) //action agreed

for (int i = 0; i < dataGridView1.Rows.Count; i++) //for each row

if (dataGridView1.Rows[i].Selected == true) //for all selected row

{

StreamReader sr = File.OpenText("Abiturient.txt"); //open main file

StreamWriter sw = File.CreateText("temp"); //temporary file

for (int j = 0; j <Convert.ToInt32(dat.Rows[i][0]) - 1 - del; j++)

//copy all until current abiturient found

{

while (true)

{

str = sr.ReadLine(); //read

if (String.Compare(str, "===================================================================") == 0)//end sign found

{

sw.WriteLine("===================================================================");

break;

}

sw.WriteLine(str); //write

}

}

if (Convert.ToInt32(dat.Rows[i][0]) - 1!= dataGridView1.Rows.Count) //abiturient wasn't the last one

{

while (true) //skip all fields about current abiturient

{

str = sr.ReadLine();

if (String.Compare(str, "===================================================================") == 0)//end sign found

break;

}

while (true) //copy all after current abiturient

{

str = sr.ReadLine();

if (str == null)

break;

sw.WriteLine(str);

}

}

sr.Close();

sw.Close();

File.Replace("temp", "Abiturient.txt", "t"); //replace files

//----delete temporary------

File.Delete("temp");

File.Delete("t");

del++; //increase number of deleted

}

if (flag == true)

{

MessageBox.Show("Виділеністрокивидалені", "Info",

System.Windows.Forms.MessageBoxButtons.OK, //messagebox show

System.Windows.Forms.MessageBoxIcon.Information);

Form8_Load(sender, e);

}

}

Для усіх виділених рядків відбувається видалення відповідного абітурієнта шляхом заміни файлів. Після видалення таблиця обновлюється методом Form8_Load(sender,e).

 

Висновок

У даній роботі ми додали можливості видалення та зміни інформації про абітурієнтів. Також познайомилися з контекстним меню та листами з вкладками.


Дата добавления: 2015-11-26; просмотров: 129 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.016 сек.)