PDA

View Full Version : آموزش: اضافه کردن خاصیت(Property) سفارشی به کنترل سفارشی



یونس ابراهیمی
جمعه 15 اسفند 1393, 17:32 عصر
شاید دوست داشته باشید که کنترلی ایجاد کنید که دارای خاصیتی سفارشی باشد. مثلا اینکه یک کنترل textBox داشته باشید که هنگام استفاده از آن کاربر فقط بتواند عدد وارد کند. ویژوال استودیو این به شما این امکان را می دهد که چنین کنترلی با چنین خاصیتی ایجاد کنید. در این درس می خواهیم جعبه متنی ایجاد کنیم که دارای خاصیت Watermark باشد. برای این کار یک UserControl به صورت زیر ایجاد کنید :

http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-1.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-1.png)



بعد از ایجاد برنامه فایل UserControl1.cs را حذف کرده و سپس یک کلاس به صورت زیر و با نام ExtendTextBox به برنامه اضافه کنید :

http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-3.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-3.png)



http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-4.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-4.png)



بعد ار مراحل بالا کلاسی به صورت زیر ایجاد می شود:

http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-9.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-9.png)



کد های کلاس ایجاد شده را به صورت زیر تغییر دهید :

http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-10.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-10.png)


بعد از تغییرات بالا کدهای زیر (خطوط 133-14) را در قسمتی که با فلش قرمز در شکل بالا مشخص شده است بنویسید:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;


namespace ControlDemo

public class ExtendTextBox : TextBox
{
#region Member Variables
Color waterMarkColor = Color.Gray;
Color forecolor;
Font font;
Font waterMarkFont;
string waterMarkText = "Your Text Here";
#endregion


#region Constructor
public ExtendTextBox()
{
base.Text = this.waterMarkText;
this.forecolor = this.ForeColor;
this.ForeColor = this.waterMarkColor;
this.font = this.Font;
this.TextChanged += new EventHandler(ExtdTextBox_TextChanged);
this.KeyPress += new KeyPressEventHandler(ExtdTextBox_KeyPress);
this.LostFocus += new EventHandler(ExtdTextBox_TextChanged);
}
#endregion


#region Event Handler Methods
void ExtdTextBox_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(this.Text))
{
this.ForeColor = this.forecolor;
this.Font = this.font;
}
else
{
this.TextChanged -= new EventHandler(ExtdTextBox_TextChanged);
base.Text = this.waterMarkText;
this.TextChanged += new EventHandler(ExtdTextBox_TextChanged);
this.ForeColor = this.waterMarkColor;
this.Font = this.waterMarkFont;
}
}

void ExtdTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
string str = base.Text.Replace(this.waterMarkText, "");
this.TextChanged -= new EventHandler(ExtdTextBox_TextChanged);
this.Text = str;
this.TextChanged += new EventHandler(ExtdTextBox_TextChanged);
}
#endregion



#region User Defined Properties
[Browsable(true)]
[Category("Extended Properties")]
[Description("sets Watermark color")]
[DisplayName("WaterMark Color")]
public Color WaterMarkColor
{
get
{
return this.waterMarkColor;
}
set
{
this.waterMarkColor = value;
base.OnTextChanged(new EventArgs());
}
}

[Browsable(true)]
[Category("Extended Properties")]
[Description("sets TextBox text")]
[DisplayName("Text")]
public new string Text
{
get
{
return base.Text.Replace(this.waterMarkText, string.Empty);
}
set
{
base.Text = value;
}
}

[Browsable(true)]
[Category("Extended Properties")]
[Description("sets WaterMark font")]
[DisplayName("WaterMark Font")]
public Font WaterMarkFont
{
get
{
return this.waterMarkFont;
}
set
{
this.waterMarkFont = value;
this.OnTextChanged(new EventArgs());
}
}

[Browsable(true)]
[Category("Extended Properties")]
[Description("sets Watermark Text")]
[DisplayName("WaterMark Text")]
public string WaterMarkText
{
get
{
return this.waterMarkText;
}
set
{
this.waterMarkText = value;
base.OnTextChanged(new EventArgs());
}
}
#endregion

}
}


بعد از اضافه کردن کدهای بالا برنامه را به صورت زیر Build کنید :

http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-5.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-5.png)


حال اگر به پوشه Debug پروژه تان مراجعه کنید مشاهده می کنید که یک فایل DLL به صورت زیر ایجاد شده است . برای دسترسی راحت به این فایل آن را در Desktop کپی کنید :

http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-8.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-8.png)


سپس یک برنامه ویندوزی جدید ایجاد کرده و فایل DLL را با طی مراحل زیر به آن اضافه کنید :

http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-6.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-6.png)



http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-7.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-7.png)



http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-11.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-11.png)


http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-12.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-12.png)


http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-131.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-01-131.png)



با دقت در کدهای بالا متوجه می شوید که قسمت های از کد، تکرار شده است. مثلا به کدهای زیر توجه کنید :



[Browsable(true)]
[Category("Extended Properties")]
[Description("sets Watermark color")]
[DisplayName("WaterMark Color")]




وظیفه کدهای بالا را در شکل زیر مشاهده می کنید :
http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-14.png (http://www.w3-farsi.com/wp-content/uploads/2015/03/Add-Custom-Property-to-Custom-Property-14.png)

لینک مرجع :www.w3-farsi.com (http://www.w3-farsi.com/%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AE%D8%A7%D8%B5%DB%8C%D8%AAproperty-%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%DB%8C-%D8%A8%D9%87-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D8%B3%D9%81%D8%A7/)