کنترل یک عنصر ویژوال می باشد که می توان آنرا در زمان طراحی برروی فرم قرار داد و در صورت لزوم خاصیت های آنرا تغییر داد. در این قسمت استانداردهای لازم برای ایجاد یک کنترل و روش های آن شرح داده می شود.
ایجاد یک پروژه
بمنظور ایجاد یک کنترل جدید شما نیازمند ایجاد یک پروژه می باشید. در این حالت شما دارای دو انتخاب می باشید: Windows Control Library و Web Control Library. بسته به نوع کنترلی که می خواهید طراحی کنید یکی از موارد فوق را انتخاب نمایید. پس از ایجاد پروژه می توانید در صورت لزوم فایل کنترل ایجاد شده (UserControl1.cs) را پاک کرده و یک کلاس جدید به پروژه اضافه نمایید.
ارث بری از کنترل موجود
برای ایجاد یک کنترل جدید می توانید در صورت لزوم از کنترلهای موجود ارث بری کرده و آنها را بر حسب نیاز تغییر دهید و یا یک کنترل را از ابتدا ایجاد نمایید.
public class ControlName : System.Windows.Froms.Panel
{
...
افزودن خصوصیت (Property)
بمنظور ایجاد خصوصیت جدید شما نیازمند تعریف یک متغییر خصوصی و یک تابع عمومی برای مقداردهی و اخذ مقدار خصوصیت می باشید.
private System.Windows.Forms.Border3DSide borderSide;
public System.Windows.Forms.Border3DSide BorderSide
{
get { return this.borderSide; }
set
{
if ( this.borderSide != value )
{
this.borderSide = value;
this.Invalidate(); // force repaint control at design time
}
}
}
پس از تعریف خصوصیت جدید ترجیحا آنرا در سازنده کلاس مقداردهی اولیه نمایید.
public ControlName
{
this.borderSide = System.Windows.Froms.Boder3DSide.All;
this.border3DStyle = System.Windows.Froms.Border3DStyle.Etched;
}
بازنویسی متدهای ارث برده شده (override)
در صورتیکه کنترل ایجاد شده را از یک کنترل موجود ارث برده باشید، ممکن است نیازمند بازنویسی کد تعدادی از متدهای کنترل اولیه باشید.
protected override void OnPaint(System.Windows.From.PaintEventArgs e)
{
base.OnPaint(e);
System.Windows.Froms.ControlPaint.DrawBorder3D (
e.Graphics,
this.ClientRectangle,
this.border3DStyle,
this.borderSide );
}
بمنظور پیدا کردن تمامی متدهای موجود کلاس ارث برده شده می توان از Object Browse استفاده نمود و پس از پیدا کردن متد مورد نظر روی آن کلیک راست کرده و Override را از گزینه Add انتخاب نمایید.
افزودن صفات مربوط به خصوصیت ها به منظور نمایش آن در محیط طراحی
بمنظور نمایش صحیح خصوصیت های نوشته شده در پنجره Properties محیط طراحی باید چندین صفت مربوط به خصوصیت را تنظیم نمود.
Bindable: با دادن مقدار true به عنوان پارامتر به این تابع پس از هر بار تغییر این خصوصیت، در محیط طراحی سیگنالی به معنی اینکه مقدار این خصوصیت تغییر کرده صادر می گردد و کلاس designer شما (در ادامه توضیح داده خواهد شد) را آگاه خواهد کرد.
DefualtValue: با دادن مقدار پیش فرض مورد نظر برای این خصوصیت در محیط طراحی مقدار ذکر شده به عنوان پیش فرض نمایان می گردد.
Category: با دادن یک رشته به عنوان پارامتر به این تابع دسته قرار گرفتن خصوصیت در پنجره Properties محیط طراحی مشخص می گردد.
Description: با دادن یک رشته به عنوان پارامتر به این تابع در صورت انتخاب خصوصیت در لیست Properties، توصیف مشخص شده در پایین این پنجره نمایش داده خواهد شد.
ReadOnly: با true قرار دادن پارامتر این متد خصوصیت مورد نظر در محیط طراحی بصورت فقط خواندنی نمایش داده می شود.
Editor: این تابع دو پارامتر می گیرد. اولین پارامتر مشخص کننده نوع Editor و پارامتر دوم مشخص کننده نوع پایه Editor می باشد (در ادامه توضیح داده خواهد شد).
[Bindable(true), Category("Border Options"),
DefaultValue(System.Windows.Forms.Border3DSide.All),
Description("Specifies the sides of the panel to
apply a three-dimensional border to.")]
public System.Windows.Forms.Border3DSide BorderSide
{
...