PDA

View Full Version : رویداد کلیک picturebox در C#‎‎‎



elvishman
چهارشنبه 18 اسفند 1395, 23:58 عصر
سلام

من برنامه ای دارم که با کلیک روی یه لیبل , یک تصویر رو از دیتابیس میاره در picturebox1 .
حالا من میخام وقتی روی picturebox1 کلیک کنم ، عکس موجود توی picturebox1 توسط windows photo viewer نمایش داده بشه .
برای اینکار از کد زیر استفاده کردم اما جواب نداده . برنامه خطایی نمیده اما هیچ اتفاقی هم با کلیک روی picturebox1 نمی افته :



private void pictureBox1_Click(object sender, EventArgs e) {
if (pictureBox1.Tag != null)
{
System.Diagnostics.Process imageViewerProcess = new System.Diagnostics.Process();
imageViewerProcess.StartInfo.CreateNoWindow = false;
imageViewerProcess.StartInfo.FileName = "rundll32.exe";
imageViewerProcess.StartInfo.Arguments =
@"C:\WINDOWS\System32\shimgvw.dll,ImageView_Fullscre en "
+ pictureBox1.Tag.ToString();
imageViewerProcess.Start();
}



با توجه به اینکه ویندوز من 7 و 64 بیت هست از مسیر C:\Windows\SysWOW64 هم به جای C:\WINDOWS\System32 استفاده کردم اما در نتیجه هیچ تغییری ایجاد نشد و برنامه همچنان کار نمیکنه . لطفا راهنمایی کنید .. ممنون

BEHZADnr
پنج شنبه 19 اسفند 1395, 10:48 صبح
سلام دوست عزیز

ابتدا Using زیر رو در فرمی که میخوای اینکارو انجام بدی وارد کن
using System.Diagnostics;

بعد از کد زیر استفاده کن
Process.Start(@"C:\Image.jpg");

روی ویندوز من که 8.1 ورژن 64bit هست اجرا شد
بازم مشکلی بود درخدمتم

elvishman
پنج شنبه 19 اسفند 1395, 10:55 صبح
ممنون از لطفت . کدی که نوشتید میدونم که کار میکنه . مساله اینه که من نمیخوام مسیر بدم . بلکه میخوام تصویری که در picturebox نمایش داده میشه رو در windows photo viewer نمایش بدم .

mr.sirwan
پنج شنبه 19 اسفند 1395, 11:40 صبح
دوست عزیز شما ابتدا باید تصویر رو روی کامپیوتر ذخیره کنین، بعد اقدام به ادرس دهی کنین، در ضمن توی picturebox.tag چی نوشته شده؟

BEHZADnr
پنج شنبه 19 اسفند 1395, 11:41 صبح
...........

elvishman
پنج شنبه 19 اسفند 1395, 13:16 عصر
سلام جناب سیروان . تصویر در کامپیوتر ذخیره شده هست . با کلیک روی یک لیبل ، من تصویری رو که قبلا در پوشه scan ( که خود این پوشه در داخل پوشه debug هست) ، در picturebox1 نمایش ( در واقع پیش نمایش) میکنم . من میخوام این امکان رو ایجاد کنم که کاربر با کلیک روی picturebox1 تصویر رو از طریق windows photo viewer تمام صفحه کنه . در واقع مسیری که تصاویر من قرار دارن به طور ثابتی در مسیر (debug\scan) هست . اما مساله همینجاست .. در واقع من میتونم کار دیگه ای هم بکنم . اینکه نام عکس رو به عنوان text یک لیبل قرار بدم . و اون روی از پوشه scan با استفاده از windows photo viewer نمایش بدم . اما به شرطی که بتونم از label.text یه عنوان نام عکس استفاده کنم . امیدورام که منظورم رو به درستی رسونده باشم ..
اجازه بدید سوالم رو طور دیگه بپرسم .
من روی یک row از دیتابیسم کلیک میکنم و نام تصویر مربوط به اون row در label1.text قرار میدم . هر سطر از دیتا بیس من تصویر مخصوص خودش رو داره و بالتبع با کلیک روی هر سطر نام تصویر در label1.text تغییر میکنه . حالا خاصیت کلیک label1 رو چطور تعریف کنیم تا عکسی که نامش در label1.text دیده میشه از پوشه scan که داخل پوشه debug هست توسط windows photo viewer نمایش داده بشه .

elvishman
پنج شنبه 19 اسفند 1395, 13:18 عصر
منظورتون از اینکه توی picturebox.tag چی نوشته ، چی هست ؟ من این رو متوجه نمیشم و شاید اشکال کار همینجا باشه

mr.sirwan
پنج شنبه 19 اسفند 1395, 13:42 عصر
من توی کدتون قسمت ادرس دهی تصویر رو نمیبینم، کجا ادرس تصویر رو میدین به photo viewer؟

جواب پست بعدی:
منظورم اینه مقدار pictureBox1.Tag چی هست؟

elvishman
پنج شنبه 19 اسفند 1395, 13:48 عصر
picturebox1.tag رو چطور مقدار دهی میکنن ؟ از کجا باید ببینم که مقدار picturebox.tag چی هست ?

mr.sirwan
پنج شنبه 19 اسفند 1395, 13:53 عصر
شما از این کد استفاده کنین:

string photoViewerPath = Environment.GetFolderPath(Environment.SpecialFolde r.ProgramFiles);

// create our startup process and argument
var psi = new System.Diagnostics.ProcessStartInfo(
"rundll32.exe", String.Format("\"{0}{1}\", ImageView_Fullscreen {2}", Environment.Is64BitOperatingSystem ? photoViewerPath.Replace(" (x86)", "") : photoViewerPath,
@"\Windows Photo Viewer\PhotoViewer.dll", "آدرس کامل تصویر"));

psi.UseShellExecute = false;

System.Diagnostics.Process.Start(psi);

Mahmoud.Afrad
پنج شنبه 19 اسفند 1395, 14:56 عصر
اگر مسئله فول اسکرین بودن هست، میتونید یک فرم ایجاد کنید با یک پیکچرباکس، در زمان نیاز عکس رو در این فرم نمایش و تمام صفحه کنید.

در هر صورت، وقتی نام عکس در لیبل موجود هست ، کافیه طبق پست2 همین تاپیک، آدرس رو در یک پروسس باز کنید.