در این جلسه قصد داریم آموزش کنترل picture Box در سی شارپ را با مثال و کدنویسی انجام دهیم و همچنین به صورت مختصر با مفهوم کلاس آشنا شویم. برای قرار دادن تصویر در فرم دو راه وجود دارد که هر کدام را توضیح میدهیم.(تذکر:در جلسه اول با محیط ویندوز فرم آشنا شدیم و همچنین کار کردن با دستورات را در آموزش برنامه نویسی تحت کنسول آموزش دادیم)
آموزش کنترل picture Box در سی شارپ
راه اول:
از پنجره ToolBax کنترل Picture Box را انتخاب می کنیم:
Picture Box دو تا مشخصه ی مهم دارد:
1- خاصیت Image :از طریق این خاصیت می توانیم یک تصویر انتخاب کنیم.
2-خاصیت Size Mode :که اندازه تصویر را تعیین می کند.اگر StretchImage را انتخاب کنیم اندازه تصویر را به اندازه قابی که Picture Box دارد تبدیل می کند.
راه دوم:
می خواهیم برنامه ای بنویسیم که کاربر خودش از یک پوشه دلخواه عکسی را برای قالب Picture Box انتخاب کند.
در اینجا نمی رویم سراغ ToolBox و از آنجا OpenFileDialog را انتخاب کنیم در اینجا می خواهیم با مفهوم کلاس ها بیشتر آشنا شویم.
کنترل های مورد نیاز :
Picture Box
Button
ابتدا یک شیء از کلاس OpenFileDialog ایجاد می کنیم.
روش ایجاد کلاس:
کلاس: نقشه نوعی و مشترک گروهی از اشیا است که ویژگی های مشترکی داشته و رفتارهای مشترکی از خود نشان می دهند.
; () نام کلاس New = نامی که ما به آن اختصاص می دهیم نام کلاس
نحوه کدنویسی:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog Img_Open = new OpenFileDialog();
در اینجا یک شیء از کلاس OpenFileDialog ساختیم//
Img_Open.Filter = “Image File (*.Gif;*.jpg)|*.Gif;*.jpg”;
Img_Open.Title = “بارگذاری تصویر”;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
در اینجا خاصیت StretchImage را در حین کد نویسی بهش دادیم//
if (Img_Open.ShowDialog() == DialogResult.OK)
pictureBox1.Image = Image.FromFile(Img_Open.FileName);
}
}
ترفندی با استفاده از کنترل picture Box
ابتدا دو تا Picture Box را روی فرم قرار می دهیم
Picture Box1
1 – در خاصیت Image یک تصویر انتخاب می کنیم.
2 – خاصیت Size Mode : روی StretchImage می گذاریم.
3 – خاصیت Cursor : روی Hand می گذاریم وقتی اشاره گر موس روی کنترل Picture Box رفت اشاره گر موس به شکل دست در می آید.
4 – سایز کنترل Picture Box1 را کوچکتر از سایز کنترل Picture Box2 قرار می دهیم.
Picture Box2
1- در خاصیت Image یک تصویر انتخاب می کنیم.
2-خاصیت Size Mode : روی StretchImage می گذاریم.
3-خاصیت Visible : False
عکس بزرگ را روی عکس کوچک قرار می دهیم برای اینکه عکس کوچک زیر عکس بزرگی قرار گیرد در نوار ابزار دو گزینه هست به نام های Send to Back و Bring to Front که خاصیت Send to Back را برای عکس کوچکتری در نظر می گیریم.
برنامه ای بنویسید وقتی اشاره گر موس را روی عکس کوچکتری قرار دادیم عکس بزرگی را به من نشان دهد و به محضی که روی فرم آمد عکس بزرگی مخفی شود
Event ها:
در قسمت Event ها برای هر کدام موارد زیر را تعریف می کنیم:
pictureBox1 –> MouseMove
Form1 –> MouseMove
نحوه کدنویسی:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
pictureBox2.Visible = true;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
pictureBox2.Visible = false;
}
}
Slide Show
حالا قرار است با هم Slide Show را پیاده سازی کنیم، فرم زیر را طراحی می کنیم:
- خاصیت SizeMode کنترل PictureBox برابر StretchImage قرار می دهیم.
- OpenFileDialog یک مشخصه ای دارد بنام MultiSelect که آن را برابر True قرار می دهم برای اینکه بتوانم چند تا فایل داخل کادر محاورش انتخاب کنیم تا با یک فاصله زمانی مشخص نشان دهد.
- خاصیت Interval کنترل Timer برابر1000 قرار می دهیم(تایمر در آموزش سیزدهم کامل توضیح دادیم)
نحوه کد نویسی
int incount = 0;
private void btnBrowser_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = “*.jpg|*.jpg”;
if(openFileDialog1 .ShowDialog()==DialogResult.OK)
{
incount = 0;
timer1.Start();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile
(openFileDialog1.FileNames[incount]);
FileNames را انتخاب می کنیم چون چند تا عکس قرار داشته باشیم//
Incount یعنی به اولین عکس من اشاره کن Incount برای اولین بار برابر صفر است و همچنین هر یک ثانیه یکبار کدهای تایمر اجرا می شود Incount را باید اضافه کنیم تا اشاره کند به عکس های بعدی
incount = (incount + 1) % openFileDialog1.FileNames.Length;
//…….
(incount + 1) که قابل قبول هست ولی چرا آمدیم % (باقیمانده) گذاشتیم و گفتیم که بر تعداد فایل هایی که کاربر داخل openFileDialog1 انتخاب کرده است؟
فرض می کنیم کاربر 4 تا عکس انتخاب کرده است (incount + 1) برابر می شود با عدد 5 یعنی عکس پنجمی را نمایش بده ,داخل openFileDialog1 وقتی عکس پنجمی را در خواست می کنیم Error می دهد و از برنامه خارج می شود آمده ایم % گذاشتیم چرا چون به محضی که به 4 برسد تعداد فایل هایی که کاربر داخل openFileDialog1 انتخاب کرده بود 4 تا بوده پس باقیمانده اش صفر می شود و دوباره اشاره می کند به اولین عکسمان
}
شاید یک کاربری دوست ندارد از خاصیت Slide Show استفاده کند و دوست داشته باشد خودش عکس ها را جلو و عقب ببرد پس:
private void btnStart_Stop_Click(object sender, EventArgs e)
{
timer1.Enabled = !timer1.Enabled;
اگر تایمر فعال باشد غیر فعال می کند و اگر غیر فعال بود فعال می کند
}
private void btnFront_Click(object sender, EventArgs e)
{
incount = (incount + 1) % openFileDialog1.FileNames.Length;
pictureBox1.Image = Image.FromFile
(openFileDialog1.FileNames[incount]);
}
private void btnback_Click(object sender, EventArgs e)
{
if(incount>0)
incount = (incount – 1) % openFileDialog1.FileNames.Length;
else
incount = (incount + 1) % openFileDialog1.FileNames.Length;
pictureBox1.Image = Image.FromFile
(openFileDialog1.FileNames[incount]);
}
برنامه را اجرا می کنیم 4 تا عکس انتخاب می کنیم:
این 4 تا عکس به ترتیب هر یک ثانیه یکبار به صورت اسلاید شو نمایش داده می شوند:
امیدواریم این آموزش مفید بوده باشد. در جلسه بعد با آموزش کاربرد Message Box با ما باشید.
داداش slide show اشتباهه؟؟؟
هر چی میزنمش کار نمیکنه
سلام و عرض ادب
لطفا سوال خود را دقیق تر مطرح کنید. اگر مشکل حل نشد تماس بگیرید تا ریموتی بررسی شود.
با تشکر از همراهی شما
سلام وقت بخیر در مورد یک موضوعی در picture box کمک میخواستم امکانش هست ر اهنمایی کنید
میخواهم یک بازی حدس تصویر داشته باشم که چندین عکس باشه که بشه حدس زد و امتیاز داد
سلام و عرض ادب. لطفا سوال خود را به صورت واضح تر و دقیق تر بیان نمایید تا کارشناسان مربوطه جوابگوی شما باشند.
سلام.امکان تنظیم روشنایی و شدت گاما رو میشه اینجا انجام داد؟
سلام و عرض ادب. لطفا از لینک های زیر استفاده نمایید:
https://www.codeproject.com/Questions/243422/Csharp-Image-Processing-Brightness-Adjustment-Trac
https://www.youtube.com/watch?v=a5J5NohHEMI
با تشکر از همراهی شما
سلام کد اسلاید شو رو نوشتم و بعد از اینکه عکس ها به پایان میرسد ارور
System. Indexoutofrangexeption رو میده چرا؟
سلام چجوری میشه روی ۵تا دکمه کلیک کرد و هرکدوم یه عکس نشون بده
سلام و عرض ادب
دقیق متوجه سوالتون نشدم ولی می توانید ۵ تا آبجکت picture را روی فرم قرار دهید و با زدن هر کدام از باتن ها خصوصیت visible آن را فعال کنید تا فقط آن عکس را برای شما نمایش دهد .
با سپاس از همراهی شما
سلام. من یه برنامه دارم با چهارتا پیکچر باکس که هرکدوم عکس دارن و داخل یه پنل ان, میخوام وقتی کاربر دکمه چپ یا راست رو میزنه, عکس ها به ترتیب منتقل بشن به پیکچر باکس قبل یا بعدشون بعد ۲ ثانیه؟؟
سلام و عرض ادب. کاری که می خواهید انجام دهید مشابه برنامه جورجین هست که با زبان سی شارپ به صورت رایگان در اینترنت موجود هست که می توانید با سرچ ساده دانلود و از آن استفاده کنید.
با تشکر از همراهی شما
سلام
عالی بود
سلام وقت بخیر
من تویه پوشه تعدادی عکس دارم.
میخوام وقتی اسم عکس وارد بشه،عکس تویه picterbox لود بشه
سلام میخواستم یه برنامه بسازم که مثلا وقتی روی عکس توی پیکچر باکس میزنم بزرگ شه مثل برنامه های دیوار یا شیپور چه کدی را باید بنویسم؟
باتشکر
سلام اگه بعد دادن آدرست تصویر استفاده کننده پوشه برنامه رو به یکجای دیگه منطقل کنه اون وقت تصویر باز نمیشه . برای رفع این مشکل باید چی کار کنم؟
چطور عکس هارو رندوم بیاریم