Российская международная академия туризма
Опубликован: 09.09.2008 | Доступ: свободный | Студентов: 811 / 38 | Оценка: 4.33 / 4.33 | Длительность: 13:07:00
Темы: Базы данных, Программирование
Специальности: Администратор баз данных
Теги:
Лекция 16:
Динамическое распределение памяти
Шаг 5. Создаем процедуру просмотра нового рисунка для добавления в галерею
Для опции главного меню "Добавить рисунок" пишем:
private void menuItem2_Click_1(object sender, System.EventArgs e) { if (openFileDialog1.ShowDialog()==DialogResult.OK) { file_name=openFileDialog1.FileName; this.tabControl1.SelectedIndex=0; this.textBox1.Text=file_name; Circle =new Bitmap(file_name); pictureBox1.Image = Circle; this.button5.Visible=true; // показываем кнопку добавления рисунка в список } }
Шаг 6. Создаем процедуру добавления рисунка в галерею
Для кнопки "Добавить в галерею" пишем:
private void button5_Click(object sender, System.EventArgs e) { // вычисляем максимальный номер записи: foreach (DataRow my_Row in dataTableApp.Rows) { string my_IDD=(my_Row["ID"].ToString()); my_Int64=Int64.Parse(my_IDD); if (my_maxID<=my_Int64) { my_maxID=my_Int64+1; } } this.textBox3.Text=my_maxID.ToString(); // вводим данные newRow=dataTableApp.NewRow(); newRow["Комментарий"]=this.textBox2.Text; newRow["t"]="1"; newRow["File"]=this.textBox1.Text; // переписываем номер newRow["ID"]=this.textBox3.Text; // обнуляем my_maxID my_maxID=0; // добавляем запись dataTableApp.Rows.Add(newRow); this.tabControl1.SelectedIndex=1; MessageBox.Show("Ok"); this.button5.Visible=false; // прячем кнопку добавления рисунка }
Шаг 7. Создаем процедуру выборочного просмотра рисунков из галереи
Для клика строки DataGrid пишем:
private void dataGrid1_Click(object sender, System.EventArgs e) { int N_row=dataGrid1.CurrentCell.RowNumber; this.tabControl1.SelectedIndex=0; file_name=dataGrid1[N_row,3].ToString(); this.textBox1.Text=file_name; this.textBox2.Text=dataGrid1[N_row,0].ToString(); this.textBox3.Text=dataGrid1[N_row,2].ToString(); // значение переменной в функции Pic_Show(); my_picture=int.Parse(this.textBox3.Text); Pic_Show(); // вызываем функцию просмотра рисунка return; }
Шаг 8. Создаем функцию просмотра рисунка
void Pic_Show(){ // проверка существования FileStream fin_picShow; try { fin_picShow=new FileStream(file_name,FileMode.Open); fin_picShow.Close(); // закрываем поток Circle =new Bitmap(file_name);// динамическое выделение памяти - здесь } catch(FileNotFoundException exc) {// если файл не найден MessageBox.Show("Запись "+my_picture+". Нет файла рисунка\n" + file_name, "Ошибка"); return;} catch(IOException exc) {// файл недоступен MessageBox.Show("Запись "+my_picture+". Используется другим процессом\n" + file_name,"Ошибка"); Circle.Dispose();// чистим динамическую память Circle =new Bitmap(file_name); } catch {/* перехват всех исключений – необходимость только для РС из-за конфликта версий */ MessageBox.Show(this.textBox3.Text+"\n"+ "Запись "+my_picture+". Фиг знает, где висим\n"+ this.textBox1.Text+"\n"+file_name+"\n"+ this.textBox2.Text,"Ошибка"); //конфликт версий, на РС стоит более поздняя: основная 100, доп. 0042 return; // чтобы программы не завершелась аварийно } this.tabControl1.SelectedIndex=0; pictureBox1.Image = Circle; return; // очистку динамической памяти предоставляем сборщику мусора }
Шаг 9. Прокручиваем записи вперед
Для кнопки "Вперед" пишем:
private void button1_Click_1(object sender, System.EventArgs e) { my_picture=int.Parse(this.textBox3.Text); //вычисляем максимальную запись foreach (DataRow my_Row in dataTableApp.Rows) { string my_IDD=(my_Row["ID"].ToString()); my_Int64=Int64.Parse(my_IDD); if (my_maxID<=my_Int64) { my_maxID=my_Int64+1; } } if (my_picture==my_maxID-1) { my_picture=1; } else my_picture=my_picture+1; this.textBox3.Text=my_picture.ToString(); int N_row=my_picture-1; //счет идет с нулевой строки file_name=dataGrid1[N_row,3].ToString(); this.textBox1.Text=file_name; this.textBox2.Text=dataGrid1[N_row,0].ToString(); Pic_Show(); return; }
Шаг 10. Прокручиваем записи назад
Для кнопки "Назад" пишем:
private void button3_Click(object sender, System.EventArgs e) { my_picture=int.Parse(this.textBox3.Text); //вычисляем максимальную запись foreach (DataRow my_Row in dataTableApp.Rows) { string my_IDD=(my_Row["ID"].ToString()); my_Int64=Int64.Parse(my_IDD); if (my_maxID<=my_Int64) { my_maxID=my_Int64+1; } } if (my_picture==1) { this.textBox3.Text=my_maxID.ToString(); my_picture=int.Parse(this.textBox3.Text)-1; } else my_picture=my_picture-1; this.textBox3.Text=my_picture.ToString(); int N_row=my_picture-1; file_name=dataGrid1[N_row,3].ToString(); this.textBox1.Text=file_name; this.textBox2.Text=dataGrid1[N_row,0].ToString(); Pic_Show(); return; }
Шаг 11. Изменяем геометрию просматриваемого рисунка
private void button4_Click(object sender, System.EventArgs e) { if (my_width==238) { my_width=134; my_loc=53; this.button4.Text="+"; // меняем свойство кнопки } else { my_width=238; my_loc=1; this.button4.Text="-"; } this.pictureBox1.Location = new System.Drawing.Point(my_loc, 30); this.pictureBox1.Size = new System.Drawing.Size(my_width, 178); }
Оставшуюся функциональность проекта предлагается разработать самостоятельно.