Российская международная академия туризма
Опубликован: 09.09.2008 | Доступ: свободный | Студентов: 807 / 36 | Оценка: 4.33 / 4.33 | Длительность: 13:07:00
Лекция 16:

Динамическое распределение памяти

< Лекция 15 || Лекция 16: 12 || Лекция 17 >

Шаг 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); 
}

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

< Лекция 15 || Лекция 16: 12 || Лекция 17 >