تبلیغات

ساخت MessageBox اختصاصی در سی شارپ (شخصی سازی)

طبیعتا با کلاس MessageBox موجود در فضای نامی System.Windows.Forms کار کرده‌اید؛ اما شاید بخواهید به دلایلی از جمله تغییر ظاهر فرم، اضافه کردن موارد جدیدی از جمله TextBox (جهت دریافت ورودی) و …، آن را شخصی‌سازی کنید. که البته نمیتوان اسم آن را شخصی‌سازی گذاشت و بهتر است بگوییم می‌خواهیم یک دیالوگ باکس اختصاصی از صفر بسازیم.

شروع به کار

یک فرم جدید به پروژه‌ی خود اضافه کرده و برای مثال نام آن را CustomDialog یا InputDialog و هرچیزی که دوست دارید قرار دهید. سپس از آنجایی که معمولا در یک دیالوگ باکس ساده، آیکونی برای فرم وجود نداشته و دکمه‌های تغییر سایز و مینیمایز کردن فرم وجود ندارند، بایستی تنظیماتی را برای فرم اختصاص دهیم؛ بنابراین در ویژگی‌های فرم:

  • FormBorderStyle را روی FixedDialog قرار دهید.
  • MaximizeBox را روی False قرار دهید.
  • MinimizeBox را روی False قرار دهید.

ما اگر بخواهیم یک دیالوگ باکس انعطاف‌پذیری ایجاد کنیم، نیاز به نوشتن کد انبوهی خواهد داشت؛ ولی فعلا هدف ما این است تا پایه و اساس ساخت یک دیالوگ باکس را یاد بگیریم! بنابراین، از آنجایی که قصد داریم تا یک فرم ساده برای دریافت ورودی از کاربر ایجاد کنیم، طراحی خود را به صورت زیر انجام می‌دهیم:

تکمیل رویدادها

روی TextBox و دو دکمه دابل کرده و سپس رویدادهای آنها را به صورت زیر تکمیل نمایید:

نکات مهم:

  • یک رشته به نام Result تعریف کرده‌ایم تا متن TextBox را در زمان تغییر، درون آن نگه داریم؛ و همچنین آن را public کرده‌ایم تا از بیرون به آن دسترسی داشته باشیم.
  • هر فرمی به طور پیشفرض یک نوع DialogResult درون خود دارد؛ که کاربرد آن برای فهمیدن کلیت فرآیند اتفاق افتاده در یک فرم دیگر استفاده می‌شود. مثلا MessageBox را اجرا می‌کنیم و می‌خواهیم بعدا متوجه شویم که روی کدام دکمه کلیک شده است تا عملیات خاصی را انجام دهیم.
    البته اگر گزینه‌های این DialogResult برای شما محدود بودند، می‌توانید یک نوع جدیدی مخصوص فرم خود ساخته و از آن استفاده کنید. (با روش استفاده از DialogResult در ادامه آشنا خواهید شد)
  • دات نت، یک ویژگی DialogResult برای دکمه‌ها قرار داده است که به جای تنظیم آن از داخل کد و سپس بستن دستی فرم، می‌توانیم از آن استفاده کنیم پس دو رویداد کلیک بالا را حذف کرده و از ویژگی دکمه‌ها، DialogResult را برایشان تنظیم کنید.

اجرای InputDialog از فرم دیگر

همانطور که می‌دانید، متد Show برای نمایش یک فرم دیگری به کار برده می‌شود! برای مثال، اگر بخواهیم فرم بالا را اجرا کنیم، به صورت زیر عمل خواهیم کرد:

این متد، خروجی نداشته و همچنین وقتی فرم را به نمایش دربیاورد، می‌توان برخلاف MessageBox، به فرم قبلی برگشت! بنابراین پای متد دیگری به میان می‌آید؛ و آن متد، متد ShowDialog است که خروجی DialogResult را هم به ما برمی‌گرداند و باعث می‌شود تا نتوان به فرم قبلی بازگشت؛ مگر اینکه فرم فعلی بسته شود. البته این قابلیت از طریق True کردن ویژگی TopMost فرم در داخل متد ShowDialog میسر می‌شود؛ بنابراین به هنگام اجرای ShowDialog، ادامه‌ی کد فرم اجرا کننده‌ی فرم دوم، تا زمانی که فرم دوم بستنه نشود اجرا نخواهد شد؛ بدین منظور می‌توان DialogResult را بررسی کرد:

و طبق این تفاسیر، طبیعتا می‌توانید از DialogResult استفاده نکرده و خودتان یک نوع جدیدی برای خود ایجاد کنید؛ که البته همین مقادیر DialogResult  اکثر کارهایمان را راه می‌اندازند.

بهتر است بدانید که مواردی از جمله کامپوننت‌های OpenFileDialog و SaveFileDailog نیز از همین DialogResult و متد ShowDialog استفاده می‌کنند.
تبلیغات
0
کانال تلگرام فول کده
تبلیغات

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه