PDA

View Full Version : آموزش: جعبه پیغام سفارشی ...



ghasem110deh
دوشنبه 06 بهمن 1393, 01:16 صبح
سلام به همه ...
با آموزش ساده یک جعبه پیغام ساده در خدمتون هستیم !
-------------------------------------------------------------
طبیعتا باس یه فرم به پروژه اضاف کنید : (اینجا به اسم --> MyMessageBox)
یه تایمر (برای زمان باز بودن یا همون نمایش پیغام) ---> شما می تونید نذارین - سلیقه ای هستش !
و 3 تا لیبل : یکی واسه نمایش متن پیغام - یکی واسه تیتر - یکی واسه شمارنده تایمر
و 2 تا باتون ...

اینم سورس
(http://uploadboy.com/fpjfzj3k8nwl/3287//rar)
اصل مطلب :
تعیین فرم ، بعنوان مسیج باکس پیشفرض و متغیر های مورد نیاز :

public partial class MyMessageBox : Form {
static MyMessageBox newMessageBox;
public Timer msgTimer;
static string Button_id;
int disposeFormTimer;




(جهت فراخوانی پیغام در برنامه --> ShowBox) :

public static string ShowBox(string txtMessage) {
newMessageBox = new MyMessageBox();
newMessageBox.lblMessage.Text = txtMessage;
newMessageBox.ShowDialog();
return Button_id;
}




تعیین قرار گرفتن متن پیغام در لیبل --> lblMessage و تیتر در لیبل --> lblTitle :

public static string ShowBox(string txtMessage, string txtTitle) {
newMessageBox = new MyMessageBox();
newMessageBox.lblTitle.Text = txtTitle;
newMessageBox.lblMessage.Text = txtMessage;
newMessageBox.ShowDialog();
return Button_id;
}

در رویداد لود_فرم (فرم مسیج باکس) : تعیین زمان نمایش مسیج باکس (در اینجا 30 ثانیه) و شمارش در لیبل lblTimer

private void MyMessageBox_Load(object sender, EventArgs e) {
disposeFormTimer = 30;
newMessageBox.lblTimer.Text = disposeFormTimer.ToString();
msgTimer = new Timer();
msgTimer.Interval = 1000;
msgTimer.Enabled = true;
msgTimer.Start();
msgTimer.Tick += new System.EventHandler(this.timer_tick);
}

رویداد کلید OK :

private void btnOK_Click(object sender, EventArgs e) {
newMessageBox.msgTimer.Stop();
newMessageBox.msgTimer.Dispose();
Button_id = "1";
newMessageBox.Dispose();
}

رویداد کلید Cancel :

private void btnCancel_Click(object sender, EventArgs e) {
newMessageBox.msgTimer.Stop();
newMessageBox.msgTimer.Dispose();
Button_id = "2";
newMessageBox.Dispose();
}

رویداد تایمر_کلیک : که پس از اتمام شمارش جعبه پیغام بطور خودکار بسته شود !

private void timer_tick(object sender, EventArgs e) {
disposeFormTimer--;


if (disposeFormTimer >= 0)
{
newMessageBox.lblTimer.Text = disposeFormTimer.ToString();
}
else
{
newMessageBox.msgTimer.Stop();
newMessageBox.msgTimer.Dispose();
newMessageBox.Dispose();
}
}


سوالی بود در خدمتم (به شرط بلد بودن)
موفق باشین !

ghasem110deh
دوشنبه 06 بهمن 1393, 01:30 صبح
ناگفته نماند که در این روش شما اگه اسم فرم رو MassegeBox بزارین دیگه به مسیج باکس پیشفرض VS دسترسی ندارین ، و به طبع اون به آیکون ها و دکمه ها ...
پس یه پیش یا پسوند کنارش بزارین یا یه اسم دیگه ...
---------------------------------------------------------
و برای اینکه تمام پیغام هاتون یه شکل باشن باس :
پس خودتون باس تعداد کلید ها و تصیویر مورد نظر رو اضافه کنید ...
که اگر چند نوع (ترکیب باتون) استفاده کنید می بایست چند فرم ایجاد کند (با ظاهر مورد نظر)
---------------------------------------------------------
حالا میرسیم به فراخوانی مسیج باکس :

رویداد باتون_کلیک --> کلید اول :

private void button1_Click(object sender, EventArgs e) {
string result = MyMessageBox.ShowBox("Do you want to exit?", "Exit");
if (result.Equals("1"))
{
MessageBox.Show("OK Button was Clicked");
}


if (result.Equals("2"))
{
MessageBox.Show("Cancel Button was Clicked");
و یا بستن فرم مسیج با یه کلوز ساده //
}
}

و باتون دوم :

private void button2_Click(object sender, EventArgs e) {
string result = MyMessageBox.ShowBox("آیا قصد خروج از برنامه را دارید ?", "خروج از برنامه");
}


-------------------------------------------------------------------------------------------

http://barnamenevis.org/attachment.php?attachmentid=127383&stc=1&d=1420749768


http://barnamenevis.org/attachment.php?attachmentid=127382&stc=1&d=1420749747

hamid30sharp
دوشنبه 06 بهمن 1393, 12:40 عصر
بهتر نبود نمونه کد آماده رو میزاشتید.؟

ghasem110deh
دوشنبه 06 بهمن 1393, 12:59 عصر
بهتر نبود نمونه کد آماده رو میزاشتید.؟

لینک دان :

http://s4.picofile.com/file/8166254676/Custom_MessageBox.rar.html

پسورد جهت دان : rahgoshafan.ir

partovinia
سه شنبه 07 بهمن 1393, 12:00 عصر
سلام استاد .ضمن تشکر از شما , سوالم اینه که چه طور این lable رو که در title قرار داره بزرگش کردین؟و اینکه اگر بخوام براش icon متفوت بگذارم باید فرم هام رو تغییر بدم؟ یا اینکه می تون picturebox متفاوت بذارم .
موفق باشید

ghasem110deh
سه شنبه 07 بهمن 1393, 18:57 عصر
سلام استاد .ضمن تشکر از شما , سوالم اینه که چه طور این lable رو که در title قرار داره بزرگش کردین؟و اینکه اگر بخوام براش icon متفوت بگذارم باید فرم هام رو تغییر بدم؟ یا اینکه می تون picturebox متفاوت بذارم .
موفق باشید

سلام ...
ما شاگرد تنبل کلاس هم نیستیم :قهقهه:
---------------------------------------
1- فونت لیبل رو بزرگتر کردم ... (مواظب باش از فرم بیرون نزنه)
2- واسه عکس (آیکون پیغام) میشه دو تا راه رفت :
اول : واسه هر پیغام یک فرم طراحی کنید (من اینو رفتم ---> چون سن تا آیکون بیشتر ندارم (هشدار - تایید انجام کار - خروج) که متن های مختلفی میشه بشون داد)
دوم : اگه تعداد آیکون هاتون زیاده میشه یه فرم درست کرد و آیکون هار رو توی resource نگه داری کنید و با استفاده از سوئیچ کیس بنا به دستور اجرا شده آیکون مورد نظر رو فراخوانی کنید !
که پیچیده میشه (من با همنو اولی راحت ترم :))

یا علی !

سی ساید
شنبه 10 مرداد 1394, 14:19 عصر
سلام.
خیلی ممنون از پروژهای که گذاشتین.
راستی, لینک messagebox پاک شده.
لطف میکنین بررسی کنین؟

ghasem110deh
شنبه 10 مرداد 1394, 14:40 عصر
سلام.
خیلی ممنون از پروژهای که گذاشتین.
راستی, لینک messagebox پاک شده.
لطف میکنین بررسی کنین؟

پست اول ویرایش شد ...

یا علی !

Mahmoud.Afrad
یک شنبه 11 مرداد 1394, 15:22 عصر
یک نکته: برای متوجه شدن دکمه فشرده شده نیاز به Button_id نداری. چون از فرم ارث بری کردی میتونی از DialogResult فرم استفاده کنی(در جای مناسب ست و return کنی).

ghasem110deh
چهارشنبه 14 مرداد 1394, 15:22 عصر
بعضی از دوستان در مورد نحوه کار با پیغام سوالی مثل حذف یک آیتم که دو گزینه yes و no داره ، به مشکل خوردن !

اگه به اینصورت عمل کنید هیچ مشکلی نداره :


string result = Question.ShowBox(@"آیا سطر منتخب حذف شود ؟
اطلاعات مورد نظر از بانک حذف خواهد شد", "حذف");
if (result.Equals("1"))
{
Cost_Delete(); // دستورات حذف یا هر دستور دیگه ای که قراره با تایید کاربر انجام بشه
}
if (result.Equals("2"))
{
// خالی بودن یعنی بدون هیچ عکس العملی (و فقط جعبه پیغام بسته میشه)
}

reza11_2005
چهارشنبه 05 خرداد 1395, 22:16 عصر
سلام لینک مشکل دارد میشه لینک جدید بگذارید
تشکر

ghasem110deh
پنج شنبه 06 خرداد 1395, 17:57 عصر
سلام :-)

بفرمایید : http://s7.picofile.com/file/8253077142/RGF_UI.rar.html