Российская международная академия туризма
Опубликован: 09.09.2008 | Доступ: свободный | Студентов: 813 / 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);
}Оставшуюся функциональность проекта предлагается разработать самостоятельно.