PDA

View Full Version : ساخت یک PopUp Menu سفارشی



توسعه نویس
یک شنبه 09 دی 1386, 00:49 صبح
با سلام خدمت دوستان.
من دارم یک User Control مینویسم. و یک دکمه داره که با کلیک روش باید یک Contex menu یا یک منوی PopUp سفارشی باز بشه. توی ایم منو گروهی از کنترلها با کد وجود داره. خودم از یه فرم برای طراحی استفاده کردم و دستور Show رو برای نمایشش دادم. ولی فرم Show نمیشه.

چطوری میشه یک Menu سفارشی مثل یک فرم ساخت که استاندارد هم باشه(Menu واقعی باشه) ؟

کسی میدونه این فرم چرا Show نمیشه ؟

hassan razavi
یک شنبه 09 دی 1386, 07:10 صبح
بدون دیدن کد و پرژتون خیلی سخته. لطفا پروژتون رو بفرستید.

توسعه نویس
دوشنبه 10 دی 1386, 00:45 صبح
فقط میخواهم بدونم چگونه میشه یک منوی بازشو (مثلا با راست کلیک) درست کرد که دارای عناصری (مثلا Button با اجرای ایونت کلیک) توش باشه. مثل یک فرم ولی از جنس منو باشه و بصورت شناور باز بشه و بعد هم با کلیک روی جای دیگه بسته بشه.

توسعه نویس
سه شنبه 11 دی 1386, 23:40 عصر
کسی این رو بلد نیست ؟؟؟

application_13
سه شنبه 11 دی 1386, 23:50 عصر
سلام دوست عزیز.
من درست متوجه نشدم. یعنی میخواید یه راست کلیک با buttton داشته باشید؟

sinpin
چهارشنبه 12 دی 1386, 09:04 صبح
با سلام خدمت دوستان.
من دارم یک User Control مینویسم. و یک دکمه داره که با کلیک روش باید یک Contex menu یا یک منوی PopUp سفارشی باز بشه. توی ایم منو گروهی از کنترلها با کد وجود داره.
چه کنترلهایی دارید ؟
مثلا کامبوباکس و تکست باکس رو بصورت پیشفرض میتونید تو یک منوی معمولی قرار بدید

خودم از یه فرم برای طراحی استفاده کردم و دستور Show رو برای نمایشش دادم. ولی فرم Show نمیشه.کسی میدونه این فرم چرا Show نمیشه ؟
کدتون رو آپلود کنید.

Mahdi.Kiani
چهارشنبه 12 دی 1386, 09:14 صبح
سلام

یه کنترل ContextMenuStrip به فرمتون اضافه کنید

این کد ها را در رویداد لود فرمتون یا بهتر از اون در Constractor فرم و بعد از دستور InirializeComponent() بنویسین





//define your controls

//
//create A Button
Button btnToPopup = new Button();
btnToPopup.Text = "click Me";
btnToPopup.Width = 120;
btnToPopup.Click += new EventHandler(btnToPopup_Click);
//
//Create A ComboBox With Some items
//
ComboBox cbo = new ComboBox();
cbo.Items.AddRange(new object[] { "رضا", "کیانی", });
cbo.Text = "رضا";
//
//Host Object For Button
//
ToolStripControlHost buttonHost = new ToolStripControlHost(btnToPopup);
//
//Host Object For ComboBox
//
ToolStripControlHost calenderHost = new ToolStripControlHost(cbo);

//
//Add Controls To ContxtMenuSTrip
//
contextMenuStrip1.Items.AddRange(new ToolStripItem[] { buttonHost, calenderHost });







این کد هم مربوط به رویداد کلیکی هست که در راست کلیک ظاهر میشه که حتما خودتون می دونین کجا بنویسین





/// <summary>
/// Click Event For Button On ContextMenu Strip
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void btnToPopup_Click(object sender, EventArgs e)
{
MessageBox.Show("I Live In The ContexMenuStrip");
}




یادتون نره که خاصیت Contextmenu Strip مربوط به فرم را روی اون ContextMenuStrip ای که روی فرم گذاشتین تنظیم کنین

پ و :
چون دات نت دم دست نداشتم ممکن کد های فوق دارای Syntax Error باشن..
اگه با کد های فوق مشکلی داشتین یه چند روزی صبر کنین دات نت پیدا کنم برنامش را براتون می نویسم و آپ می کنم
موفق باشید

Mahdi.Kiani
چهارشنبه 12 دی 1386, 23:32 عصر
سلام
برنامه آپ شد همراه با عکس نمونه

توسعه نویس
پنج شنبه 13 دی 1386, 01:37 صبح
ممنونم خیلی عالی بود.
حالا دو تا سوال دیگه:

1- من دارم یه UserControl رو توی منو نشون میدم و توی این کنترل لیبلهای مختلف و دکمه و ... کنار هم چیده شدند و تقریبا خودش به تنهایی یک منو هست. حالا چطور میشه فقط ناحیه این کنترل من نمایش داده بشه و چیزای اضافی مثل اون نوار آبی کنار منو و پس زمینه سفید اصلا نباشند ؟

2- چگونه با کلیک روی یک دکمه ، منو دقیقا زیر دکمه باز بشه ؟

Mahdi.Kiani
پنج شنبه 13 دی 1386, 09:36 صبح
ممنونم خیلی عالی بود.
حالا دو تا سوال دیگه:

1- من دارم یه UserControl رو توی منو نشون میدم و توی این کنترل لیبلهای مختلف و دکمه و ... کنار هم چیده شدند و تقریبا خودش به تنهایی یک منو هست. حالا چطور میشه فقط ناحیه این کنترل من نمایش داده بشه و چیزای اضافی مثل اون نوار آبی کنار منو و پس زمینه سفید اصلا نباشند ؟

2- چگونه با کلیک روی یک دکمه ، منو دقیقا زیر دکمه باز بشه ؟

برای سوال اولت راه های خیلی زیادی وجود داره. ساده ترین راهش که به ذهنم رسید دستکاری خیلی جزئی در رویداد paint از ContextMenu هستش. نمونه برنامه Attach شده
همانطور که تو عکس هم مشخصه ContextMenu هیچ border اضافی نداره

.... به طور کلی این جور کار ها همش یه نوع بازی کردن با رویداد paint کنترل هاست که میشه با اون خدا میدونه به طور کل خیلی کارای خوشکلی انجام داد... خودتون بیشتر روش کار کنین میتونین چیز قشنگ تری هم در بیارین....
برای سوال دوم هم...... Search .......

توسعه نویس
جمعه 14 دی 1386, 10:55 صبح
ممنون. سوال دوم رو پیدا کردم. کدش رو میزارم تا بقیه هم استفاده کنن.
منو با این کد دقیقا زیر دکمه باز میشه:

privatevoid button1_Click(object sender, EventArgs e)
{
contextMenuStrip1.Show(button1, newPoint(0, button1.Height));
}


یک سوال دیگه دارم. برای اینکه لبه کنترل رو به مرز لبه منو نزدیک کنم باید Padding مربوط به Contexmenustrip رو صفر کنم. ولی این امکان به من داده نمیشه. چطور این کار رو انجام بدم؟

Mahdi.Kiani
جمعه 14 دی 1386, 19:14 عصر
یک سوال دیگه دارم. برای اینکه لبه کنترل رو به مرز لبه منو نزدیک کنم باید Padding مربوط به Contexmenustrip رو صفر کنم. ولی این امکان به من داده نمیشه. چطور این کار رو انجام بدم؟
سلام
خواهش می کنم
اگخ منظورت اینه ک لبه های button با لبه های منو دقبقا فیت بشه خوب در کد فوق به جای 0 از 1 و یکی از height هم کم کن مثل کد زیر

کلا اگه عدد اول در کد



new Point(left,Top);

یعنی مقدار Left را زیاد کنی منو نسبت به Button به سمت راست و اگه عدد دوم یعنی Top را کم کنی منو نسبت به Button به سمت بالا شیفت پیدا می کنه

مثلا در کد زیر منو نسبت به حالت عادی 1 پیکسل به راست و یک پیکسل هم به بالا نسبت به Button شیفت پیدا می کنه




contextMenuStrip1.Show(button1, new Point(1, button1.Height-1));



اما فکر نمی کنم خیلی لزوم داشته باشه
موفق باشید

توسعه نویس
شنبه 15 دی 1386, 12:53 عصر
منظور من داخل ناحیه منو می باشد . در تصویر زیر میبینید که یک userControl در منو نمایش داده شده. با علامت قرمز ناحیه خالی که باید حذف شود مشخص شده.

در اینجا من باید بتوانم لبه های کنترل را با لبه ناحیه منو ست کنم و یا کلا پس زمینه منو را حذف کنم تا فقط کنترل نمایش یابد.

http://barnamenevis.org/forum/attachment.php?attachmentid=13455&stc=1&d=1199526632

چگونه این کار را انجام دهم؟

Mahdi.Kiani
شنبه 15 دی 1386, 14:25 عصر
منظور من داخل ناحیه منو می باشد . در تصویر زیر میبینید که یک userControl در منو نمایش داده شده. با علامت قرمز ناحیه خالی که باید حذف شود مشخص شده.

در اینجا من باید بتوانم لبه های کنترل را با لبه ناحیه منو ست کنم و یا کلا پس زمینه منو را حذف کنم تا فقط کنترل نمایش یابد.

http://barnamenevis.org/forum/attachment.php?attachmentid=13455&stc=1&d=1199526632

چگونه این کار را انجام دهم؟

دوست عزیز چیزی که من توی عکس می بینم احتمالا مربوط به userControl میشه و فکر نکنم ربطی به منو داشته باشه چون کد بریدن اطراف منو را برات گذاشتم

backGround مربوط به userConstrol را روی transparent قرار بده احتمالا حل میشه
اگه باز هم رفع نشد usercontrol را بفرست تا خودم تستش کنم
موفق باشد

توسعه نویس
یک شنبه 16 دی 1386, 00:56 صبح
از شما خیلی ممنونم.:خجالت:

توسعه نویس
سه شنبه 18 دی 1386, 22:52 عصر
دوستان جواب سوال رو اگه بدید ممنون میشم.