تبليغاتX
جادوي سي شارپ
بازنویسی کنترلهای ویندوزی:
در سی شارپ می تونید به سادگی کنترلهای ویندوزی جدیدی رو بر اساس کنترلهای ویندوزی ایجاد نمایید. برای مثال ما یک جعبه متن با قابلیت جدیدی ایجاد می کنیم. قصد داریم برای مثال، زمانی که کنترل جدید دارای فوکوس شود متن داخل آن بطور کامل به حالت انتخاب درآید. در سی شارپ کنترل جدید از روی کنترل ویندوزی موجود مشتق می شود. برای شروع یک کلاس جدید به پروژه اضافه کنید و تعریف کلاس رو به شکل زیر تغییر بدید:
public class HighlighterTextBox: System.Windows.Forms.TextBox
ما نام کنترل جدید را HighlighterTextBox گذاشتیم و اون رو از کلاس TextBox مشتق کردیم یا به اصطلاح کنترل ما از کنترل TextBox اینهریت (Inherit) شده است. برنامه رو کامپایل کنید (F6) بعد از کامپایل برنامه یک کنترل جدید در لیست کنترلهای ویندوزی به نام HighlighterTextBox اضافه خواهد شد.
تصویر کنترل ساخته شده در ToolBox ویژوال استدیو
حالا شما می تونید از این کنترل جدید در تمامی فرمهای پروژه استفاده کنید. در ادامه ما قصد داریم کدهای این کلاس رو طوری تغییر بدیم که در زمان گرفتن فوکوس متن داخل اون به حالت انتخاب دربیاد. در کد زیر این تغییرات دیده می شوند:
public class HighlighterTextBox : System.Windows.Forms.TextBox
{ public HighlighterTextBox()
{
  init();
}
private void init()
{
  //add event handler to Enter event
  this.Enter += new System.EventHandler(highlight);
}
//event handler for highlight event
private void highlight(object obj, System.EventArgs e)
{
  this.SelectionStart = 0;
  this.SelectionLength = this.Text.Length;
}
}

برای تست برنامه یک نمونه از جعبه متن ساخته شده رو از جعبه ابزار ویژوال استدیو بروی فرم قرار بدید و یک جعبه متن معمولی هم برای مقایسه روی فرم قرار بدید. حالا اگر برنامه رو اجرا کنید و متنی رو داخل هر دو تایپ کنید، با حرکت بین کنترلها می بینید که متن داخل هر دو جعبه متن انتخاب می شود. این همان حالت AutoHighlight در سی شارپ است که برای کنترل جعبه متن وجود دارد. برای اینکه بتونید تفاوت بین دو کنترل رو ببینید بین متن داخل هر دو کنترل کلیک کنید و سپس با استفاده از کلید TAB بین آن دو حرکت کنید، حالا خواهید دید که فقط متن داخل کنترل ما به حالت انتخاب در می آید و نه کنترل ویندوزی.
در مثال دوم قصد داریم یک خصوصیت نمایش تاریخ به این کنترل اضافه کنیم. این خصوصیت باعث خواهد شد که جعبه متن ما بتوانید تاریخ را نمایش دهد. برای این منظور یک خصوصیت برای نمایش تاریخ به نام ShowDateTime از جنس bool تعریف می کنیم و در زمانی که خصوصیت دارای مقدار true است تاریخ را نمایش می دهد.
کد زیر خصوصیت مورد نظر را نمایش می دهد. (برای اینکه این خصوصیت را در پنجره خصوصیات کنترل ببینید باید یکبار برنامه را کامپایل کنید).
// add new property to control
private bool showDateTime;
public bool ShowDateTime
{ get {return showDateTime;}
set
{
  showDateTime = value;
  if (showDateTime)
    this.Text = DateTime.Now.ToString();
}
}
تمرین: کنترل جدیدی بر اساس کنترل جعبه متن بسازید که دارای قابلیت نمایش تاریخ به دو شکل میلادی و شمسی رو داشته باشه. و بتونید همیشه تاریخ داخل کنترل رو به جهت مخالف تبدیل کنید. می تونید این کنترل رو توسعه بدید و از اون برای ورود اعداد و متن هم استفاده کنید.
از اینجا می تونید کد نمونه رو دانلود کنید.
تگهای فارسی: مهدی ریزوندی، سی شارپ، سي شارپ، جعبه متن، پروژه، کد نمونه، کنترل ویندوزی، ساخت کنترل، انتخاب متن، ارث بری کنترل، ویژوال استدیو، ساخت خصوصیت
English Tags: Mehdi Rizvandi, Csharp, C sharp, C#, Textbox, Button, Project, Sample Code,Windows Control, User Control, Create Control, SelectionStart, SelectionLenght, Inheritance, Inherited control, Drived Control, Visual Studio, VS, Property, Create Property
+ نوشته شده در  سه شنبه بیست و هشتم خرداد 1387ساعت 20:55  توسط کنستانتین  |