PDA

View Full Version : آموزش: ایجاد منوی راست کلیک دلخواه



erfan_urchin
سه شنبه 20 فروردین 1392, 21:08 عصر
سلام دوستان. میخوایم تو این تاپیک ببینیم که چطوری میشه منوی راست کلیک دلخواه خودمون رو تو برنامه ایجاد کنیم
اول من یه توضیحی بدم درباره منوی دلخواه (چون شاید بعضیا منظورمو نفهمیده باشن)
شما اگه در Visual Studio راست کلیک کنید با این تصویر مواجه میشین
http://up.toca.ir/images/yivx0bpantw5gmz98kc2.jpg
همونطور که میبینین یک منویی باز میشه ، یک منویی که گزینه هایی مثل View Designer و Refactor و ... داره
مایکروسافت اومده نسبت به نیاز برنامه نویس این آیتم هارو گذاشته. حالا ماهم میتونیم نسبت به نیاز کاربر تو برناممون یه سری آیتم ها تو منوی راست کلیک قرار بدیم
تو پست های بعدی در مورد این کار بطور کامل توضیح میدم

erfan_urchin
سه شنبه 20 فروردین 1392, 21:30 عصر
ابتدا از منوی Toolbox کنترل Context menu strip رو به فرممون اضافه میکنیم و ابتدا باید دو مورد رو در نظر بگیریم
1- باید ببینیم میخوایم راست کلیک برای کدوم قسمت از فرم باشه
2- باید ببینیم در منوی راست کلیک به چه گزینه هایی نیاز داریم
من میخوام راست کلیک در تکست باکس رو برای شما مثال بزنم و آموزش بدم
پس یک تکست باکس هم به فرمتون اضافه کنید
در Context menu strip در در قسمت type here گزینه هایی رو که میخواین اضافه کنید که من 2 گزینه Copy و Cut رو اضافه میکنم (طبق شکل زیر)
http://up.toca.ir/images/rucsnt411t3voi7d125.jpg

حال در فرم لود معرفی میکنین که context menu strip مربوط به تکست باکس هستش
private void Form1_Load(object sender, EventArgs e)
{
textBox1.ContextMenuStrip = new ContextMenuStrip();
}
تو مرحله بعدی میگی که وقتی رو تکست باکس راست کلیک کردی آیتم های درون contextMenuStrip رو نمایش بده و برای این کار در رویداد textBox1_MouseDown کد زیر رو مینویسین
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
contextMenuStrip1.Show(textBox1, e.Location);
}
تو مرحله بعد رو ی هریک از آیتم های copy و cut کلیک میکنی تا رویدادهای کلیک آن ها باز شوند و کد های مربوط به کاری که میخوان انجام بدن رو مینویسین
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox1.Copy();
}
private void cutToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox1.Cut();
}
حالا اگه روی تکست باکس راست کلیک کنید منوی مورد نظر رو میبینید
http://up.toca.ir/images/1uphocu392b1y1ga6tt8.jpg

erfan_urchin
سه شنبه 20 فروردین 1392, 21:53 عصر
خب تا اینجا یاد گزفتیم چجوری منوی راست کلیک مورد نظرمون رو بسازیم
حالا میپردازیم به رفع اشکالات برنامه
همونطور که میدونید بعضی از آیتم ها بعضی اوقات باید فعال و بعضی اوقات باید غیرفعال باشن
مثلا تو این منویی که ماساختیم لازم داریم که وقتی که کاربر تکستی رو انتخاب کرد گزینه های Copy و Cut فعال بشن و اگر تکستی رو انتخاب نکردن با صحنه زیر مواجه بشن
http://up.toca.ir/images/bd3yf5glyqfhpqszhw64.jpg
همونطور که میبینین چون کاربر تکستی رو انتخاب نکرده گزینه ها غیر فعال هستن
الان میخوایم ببینیم چجوری میشه این کارو انجام داد.

برای اینجور موارد که لازم داریم گزینه ای در مواقعی غیر فعال باشه باید کدها رو در رویداد contextMenuStrip1_Opening بنویسیم
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
copyToolStripMenuItem.Enabled = textBox1.SelectionLength > 0;
cutToolStripMenuItem.Enabled = textBox1.SelectionLength > 0;
}
حال اگه کاربر تکستی در تکست باکس انتخاب کنه با صحنه زیر مواجه میشه
http://up.toca.ir/images/5pab8ozcpla5y4mte803.jpg
و اگه کاربر تکستی رو در تکست باکس انتخاب نکنه با صحنه زیر مواجه میشه
http://up.toca.ir/images/2d3b7o8djn0x4atz5y4m.jpg

به همین راحتی میتونیم منوی راست کلیک مورد نظرمون رو بسازیم. امیدوارم این آموزش بدردتون بخوره
تو پست بعدی برنامه کامل رو براتون آپلود میکنم تا اگه کسی لازم داشت دانلود کنه

erfan_urchin
سه شنبه 20 فروردین 1392, 21:55 عصر
این هم برنامه کامل

erfan_urchin
چهارشنبه 21 فروردین 1392, 14:51 عصر
دوستان یه نکته رو یادم رفت بگم
تو پست شماره 2 گفتیم برای معرفی این که context menu strip مربوط به تکست باکس هست از کد زیر استفاده کردیم
private void Form1_Load(object sender, EventArgs e)
{
textBox1.ContextMenuStrip = new ContextMenuStrip();
}
برای معرفی بقیه کنترل ها context menu strip هم فقط کافیه اول ، اسم کنترل رو بنویسین
مثلا اگه میخواین برای button باشه مینویسین
button1.ContextMenuStrip = new ContextMenuStrip();
یا برای این که وقتی روی فرم کلیک شد منوی مورد نظر نشون بده از کد زیر استفاده میکنیم
this.ContextMenuStrip = new ContextMenuStrip();
فقط حواستون باشه برای فرم حتما از this استفاده کنید و از کدایی مثل کد زیر استفاده نکنید چون کار نمیکنه
Form1 f1 = new Form1();
f1.ContextMenuStrip = new ContextMenuStrip();

f.beigirad
جمعه 23 فروردین 1392, 15:16 عصر
درود.

با تشکر فراوان بخاطر آموزش خوبتون.

متاسفانه این برنامه اجرا نمیشه روی سیستمم.
من هنوز از ویژوال استدیو 2010 استفاده میکنم.میشه نسخه دات نت 4 رو هم بذارین.

ممنونم

danialafshari
جمعه 23 فروردین 1392, 15:32 عصر
درود.

با تشکر فراوان بخاطر آموزش خوبتون.

متاسفانه این برنامه اجرا نمیشه روی سیستمم.
من هنوز از ویژوال استدیو 2010 استفاده میکنم.میشه نسخه دات نت 4 رو هم بذارین.

ممنونم

یک سری موارد هست که بهتره قبل از شروع برنامه نویسی یاد گرفته شوند
برای باز کردن این پروژه ها فایل .csproj که در پوشه ی کناری قرار داره رو می تونید باز کنید و بعد روی پروژه sln قبلی سیو کنید
به همین روش بدون داشتن vs2012 سیو کردم براتون

f.beigirad
جمعه 23 فروردین 1392, 15:46 عصر
یک سری موارد هست که بهتره قبل از شروع برنامه نویسی یاد گرفته شوند
برای باز کردن این پروژه ها فایل .csproj که در پوشه ی کناری قرار داره رو می تونید باز کنید و بعد روی پروژه sln قبلی سیو کنید
به همین روش بدون داشتن vs2012 سیو کردم براتون

حرف شما کاملا درسته.
ولی این نکات ریز رو جایی ننوشتن.کتابی نیست.
تا هم بهشون برخورد نکنم یاد نمیگیرم.

در کل ممنون بخاطر آموزشتون

erfan_urchin
جمعه 23 فروردین 1392, 15:58 عصر
درود.

با تشکر فراوان بخاطر آموزش خوبتون.

متاسفانه این برنامه اجرا نمیشه روی سیستمم.
من هنوز از ویژوال استدیو 2010 استفاده میکنم.میشه نسخه دات نت 4 رو هم بذارین.

ممنونم

دست عزیز ، نمیدونم چرا اما فقط بعضیا این مشکلو دارن!!! من برای بعضی ها که از 2010 استفاده میکردن هم اینو فرستادم و تونستن باز کنن اما یه نفر بود که مشکل شمارو داشت و من بخطر همین حتی با دات نت 3.5 برنامه رو براش نوشتم اما بازم براش باز نکرد
نمیدونم چرا اینجوریه ، حالا من این برنامه رو با همون دات نت 4 میزارم براتون ببینید باز میشه؟؟؟
بفرمایید اینم لینک
http://uploadtak.com/images/i911_WindowsFormsApplicat.rar

f.beigirad
جمعه 23 فروردین 1392, 16:09 عصر
دست عزیز ، نمیدونم چرا اما فقط بعضیا این مشکلو دارن!!! من برای بعضی ها که از 2010 استفاده میکردن هم اینو فرستادم و تونستن باز کنن اما یه نفر بود که مشکل شمارو داشت و من بخطر همین حتی با دات نت 3.5 برنامه رو براش نوشتم اما بازم براش باز نکرد
نمیدونم چرا اینجوریه ، حالا من این برنامه رو با همون دات نت 4 میزارم براتون ببینید باز میشه؟؟؟
بفرمایید اینم لینک
http://uploadtak.com/images/i911_Win...msApplicat.rar

راه حل آقای danialafshari کارساز بود.

f.beigirad
دوشنبه 31 تیر 1392, 23:59 عصر
ابتدا از منوی Toolbox کنترل Context menu strip رو به فرممون اضافه میکنیم و ابتدا باید دو مورد رو در نظر بگیریم
1- باید ببینیم میخوایم راست کلیک برای کدوم قسمت از فرم باشه
2- باید ببینیم در منوی راست کلیک به چه گزینه هایی نیاز داریم
من میخوام راست کلیک در تکست باکس رو برای شما مثال بزنم و آموزش بدم
پس یک تکست باکس هم به فرمتون اضافه کنید
در Context menu strip در در قسمت type here گزینه هایی رو که میخواین اضافه کنید که من 2 گزینه Copy و Cut رو اضافه میکنم (طبق شکل زیر)
http://up.toca.ir/images/rucsnt411t3voi7d125.jpg

حال در فرم لود معرفی میکنین که context menu strip مربوط به تکست باکس هستش
private void Form1_Load(object sender, EventArgs e)
{
textBox1.ContextMenuStrip = contextMenuStrip1;
}
تو مرحله بعدی میگی که وقتی رو تکست باکس راست کلیک کردی آیتم های درون contextMenuStrip رو نمایش بده و برای این کار در رویداد textBox1_MouseDown کد زیر رو مینویسین
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
contextMenuStrip1.Show(textBox1, e.Location);
}
تو مرحله بعد رو ی هریک از آیتم های copy و cut کلیک میکنی تا رویدادهای کلیک آن ها باز شوند و کد های مربوط به کاری که میخوان انجام بدن رو مینویسین
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox1.Copy();
}
private void cutToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox1.Cut();
}
حالا اگه روی تکست باکس راست کلیک کنید منوی مورد نظر رو میبینید
http://up.toca.ir/images/1uphocu392b1y1ga6tt8.jpg


با سلامی دوباره خدمت دوستان.

با قرار دادن قسمت اول کد بالا :
private void Form1_Load(object sender, EventArgs e)
{
textBox1.ContextMenuStrip = contextMenuStrip1;
}


دیگه مهم نیست که شما قسمت بعدی رو بنویسید یا نه.خود به خود وقتی کلیک راست میکنید منورو نشون میده.منظورم این کده:
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
contextMenuStrip1.Show(textBox1, e.Location);
}


فقط کافیه شما contextMenuStrip1 رو به ContextMenuStrip تکس باکس نسبت بدید.


با خودتون میگید چه موضوع بیخودیو مطرح کردما!!

ولی دوستان ، من از تکس باکسهایی که خودم سفارشی کردم استفاده میکنم.و نمایش این contextMenuStrip هم یکی از پروپرتیهاشه.که برای کلیک راست این منورو نشون بده یا نه.
چکار کنم که برای نمایش این منو کد قسمت دوم اجرا شه.نه اینکه با یه نسبت دادن کار خودشو انجام بده
با تشکر

f.beigirad
سه شنبه 01 مرداد 1392, 00:37 صبح
جوابشم خودم کشف کردم.میذارم برا دوستان :

باید بگم که اصلا نیازی به کد
textBox1.ContextMenuStrip = contextMenuStrip1;
نیست.چرا که در کد:

private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
contextMenuStrip1.Show(textBox1, e.Location);
}


ما این منو رو به تکس باکس نسبت میدیم.

اینجا یک مشکل ایجاد میشه : "منوی کلیک راست خود ویندوز"
این مشکل هم اینطور برطرف میکنیم:
textBox1.ContextMenuStrip = new ContextMenuStrip();
با اینکار دیگه از منوی خود ویندوز خبری نیست.
منبع (http://stackoverflow.com/questions/266971/disable-datagridview-system-contextmenu)
جا داره از کاربر erfan_urchin (http://barnamenevis.org/member.php?267050-erfan_urchin)که این آموزش رو تدارک دیدن تشکر کنم.و درخواست کنم پست 2 رو ویرایش کنن.

fool66
سه شنبه 01 مرداد 1392, 12:50 عصر
میشه نحوه گذاشتن ایکونشون رو بزاری

erfan_urchin
سه شنبه 01 مرداد 1392, 16:19 عصر
جا داره از کاربر erfan_urchinکه این آموزش رو تدارک دیدن تشکر کنم.و درخواست کنم پست 2 رو ویرایش کنن.
ممنون دوست عزیز از نکته ای که گفتین. پست 2 رو ویرایش کردم

erfan_urchin
سه شنبه 01 مرداد 1392, 16:49 عصر
میشه نحوه گذاشتن ایکونشون رو بزاری

برای گذاشتن آیکون کنار هر کدوم از گزینه ها هم باید مراحل زیر رو طی کنید

1- روی گزینه مورد نظر کلیک کنید
مرحله1 (http://www.up3.98ia.com/images/t8tdbanaptvkssw3q23.jpg)

2- در پراپرتی های آن گزینه Image را انتخاب کنید
مرحله2 (http://www.up3.98ia.com/images/ja9su6mm5ons18qpuymw.jpg)

3- عکس مورد نظر را انتخاب کنید
تذکر: دقت کنید که فقط عکس هایی با پسوندهای jpg , jpeg , bmp , png , gif , wmf رو میتونین انتخاب کنید و آیکون (ico.*) نمیتونید بزارید
مرحله3 (http://www.up3.98ia.com/images/k52ksbonr9xcurwist8.jpg)

4- و در مرحله آخر OK رو انتخاب کنید و می بینید که عکس مورد نظر کنار گزینه موردنظرتون قرار داده شده
مرحله 1-4 (http://www.up3.98ia.com/images/7qbbe9pzq4cu5rolmnyf.jpg)
مرحله 2-4 (http://www.up3.98ia.com/images/30wps2n99z5awaxov6w.jpg)
مرحله 3-4 (http://www.up3.98ia.com/images/1k59f3j1n7f7i0rifjz0.jpg)

sara_6991
چهارشنبه 30 مرداد 1392, 09:46 صبح
میشه در مورد برنامه ای که راست کلیک و چپ کلیک را فعال کند هم راهنمایی کنید یعنی اگه مثلا یه متغیری مقدارش 1 بود چپ کلیک انجام بشه اگه 0 بود عمل راست کلیک انجام بشه