PDA

View Full Version : سوال: ساخت ایونت برای pictureBox



alireza_g698
سه شنبه 25 شهریور 1393, 21:54 عصر
سلام دوستان.
من از این کد برای نمایش عکس های دیتابیس در یک فرم جدید استفاده میکنم.
private void List_Load(object sender, EventArgs e)
{
SqlConnection connection = new SqlConnection("server=alireza\\sql2012;database=myImage;trusted_c onnection=true;");
SqlCommand command = new SqlCommand("showImage", connection);
DataTable table = new DataTable();
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
table.Load(reader);
for (int i = 0; i < table.Rows.Count; i++)
{
PictureBox oBox = new PictureBox();
oBox.SizeMode = PictureBoxSizeMode.StretchImage;
oBox.Height = 100;
oBox.Width = 100;
MemoryStream stream = new MemoryStream((byte[])table.Rows[i]["Data"]);
oBox.Image = Image.FromStream(stream);
flowLayoutPanel1.Controls.Add(oBox);
}
}
catch (Exception)
{
throw;
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
}

و این هم نتیجه ای که در فرم من نشون داده میشه

123571

حالا من میخوام روی هر کدوم از این عکس ها که کلیک میکنم ،ID اون رو در دیتابیس بدست بیارم.لطفا راهنمایی بفرمایید
با تشکر

khokhan
سه شنبه 25 شهریور 1393, 23:46 عصر
حالا من میخوام روی هر کدوم از این عکس ها که کلیک میکنم ،ID اون رو در دیتابیس بدست بیارم.لطفا راهنمایی بفرمایید


private void Form1_Load(object sender, EventArgs e)
{

SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\picasu.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

SqlCommand command = new SqlCommand("showImage", connection);
DataTable table = new DataTable();
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
table.Load(reader);
for (int i = 0; i < table.Rows.Count; i++)
{
PictureBox oBox = new PictureBox();
oBox.SizeMode = PictureBoxSizeMode.StretchImage;
oBox.Height = 100;
oBox.Width = 100;
MemoryStream stream = new MemoryStream((byte[])table.Rows[i]["photo"]);
oBox.Image = Image.FromStream(stream);
oBox.Tag = table.Rows[i]["id"].ToString();
oBox.Click += new EventHandler(oBox_Click);
flowLayoutPanel1.Controls.Add(oBox);
}


}
catch (Exception)
{
throw;
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
}
private void oBox_Click(object sender, EventArgs e)
{
PictureBox tb = (PictureBox)sender;
MessageBox.Show("" + tb.Tag.ToString());

}
}
}

alireza_g698
چهارشنبه 26 شهریور 1393, 00:58 صبح
private void Form1_Load(object sender, EventArgs e)
{

SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\picasu.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

SqlCommand command = new SqlCommand("showImage", connection);
DataTable table = new DataTable();
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
table.Load(reader);
for (int i = 0; i < table.Rows.Count; i++)
{
PictureBox oBox = new PictureBox();
oBox.SizeMode = PictureBoxSizeMode.StretchImage;
oBox.Height = 100;
oBox.Width = 100;
MemoryStream stream = new MemoryStream((byte[])table.Rows[i]["photo"]);
oBox.Image = Image.FromStream(stream);
oBox.Tag = table.Rows[i]["id"].ToString();
oBox.Click += new EventHandler(oBox_Click);
flowLayoutPanel1.Controls.Add(oBox);
}


}
catch (Exception)
{
throw;
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
}
private void oBox_Click(object sender, EventArgs e)
{
PictureBox tb = (PictureBox)sender;
MessageBox.Show("" + tb.Tag.ToString());

}
}
}


با سلام و تشکر از پاسخ شما

ممنون میشم بیشتر در باره PictureBox tb = (PictureBox)sender; یکم توضیح بدید.با سپاس فراوان

mohsen12345
چهارشنبه 26 شهریور 1393, 08:35 صبح
با سلام و تشکر از پاسخ شما

ممنون میشم بیشتر در باره PictureBox tb = (PictureBox)sender; یکم توضیح بدید.با سپاس فراوان

منظور object sender رو به عنوان یه picturebox بشناسه و داخل متغییر tb میریزه

alireza_g698
چهارشنبه 26 شهریور 1393, 22:32 عصر
منظور object sender رو به عنوان یه picturebox بشناسه و داخل متغییر tb میریزه

با سلام
ممنون
اونوقت منوظر از
oBox.Click += new EventHandler(oBox_Click);

چی هست؟
با تشکر

khokhan
چهارشنبه 26 شهریور 1393, 22:58 عصر
با سلام
ممنون
اونوقت منوظر از
oBox.Click += new EventHandler(oBox_Click);

چی هست؟
با تشکر
هرقاب عکسی که درون حلقه ایجاد می شه با این خط کد ، دارای رویداد کلیک می گردد
به عبارتی پاسخ سوالتون در همین یه خط خلاصه می شه :لبخند:

alireza_g698
چهارشنبه 26 شهریور 1393, 23:24 عصر
هرقاب عکسی که درون حلقه ایجاد می شه با این خط کد ، دارای رویداد کلیک می گردد
به عبارتی پاسخ سوالتون در همین یه خط خلاصه می شه :لبخند:

ممنون
یه سوال دیگه داشتم
من یک contextMenuStrip برای کلیک راست دارم.و در کلیک راستم یک گزینه به نام delete وجود داره که در رویداد کلیک اون کد های حذف از دیتایس نوشته شده.الان چجوری میتونم این ID که با کلیک راست گرفتم برای رویداد کلیک گزینه delete بفرستم؟
سپاس فراوان

khokhan
چهارشنبه 26 شهریور 1393, 23:34 عصر
ممنون
یه سوال دیگه داشتم
من یک contextMenuStrip برای کلیک راست دارم.و در کلیک راستم یک گزینه به نام delete وجود داره که در رویداد کلیک اون کد های حذف از دیتایس نوشته شده.الان چجوری میتونم این ID که با کلیک راست گرفتم برای رویداد کلیک گزینه delete بفرستم؟
سپاس فراوان
در یک رویداد مناسب کاری کن تا contextMenuStrip روی قاب عکسها ظاهر بشه ، یه چیزی مثل این :


private void Form1_Load(object sender, EventArgs e)
{
pic.ContextMenuStrip = contextMenuStrip1;
pic.ContextMenuStrip.Click += new EventHandler(this.MyPicHandler);


و بعد در رویداد کلیک آیتم مربوطه می تونی آیدی اختصاص یافته به tag قاب عکس مورد اشاره رو دریافت کرده و با توجه به اون هر بلایی که خواستی سرش بیاری :


void MyPicHandler(object sender, EventArgs e)
{
PictureBox pic = sender as PictureBox;

if(pic.Tag != null)
MessageBox.Show(pic.Tag.ToString());
}