آموزش ساخت user control کنترل dll در سی شارپ c#

آموزش ساخت user control کنترل dll در سی شارپ c#

آموزش سی شارپ c#

برای ساخت کنترل dll در سی شارپ C#  در ادامه مبحث قبلی ساخت یوزر کنترل در سی شارپ بخشهایی به مبحث قبل می افزاییم:

  • افزودن متد به کنترل در سی شارپ

  • افزودن پراپرتی به کنترل در سی شارپ

ساخت dll یا کپسوله سازی از مفاهیم شی گرایی است که در سی شارپ مورد استفاده قرار میگیرد.

در مرحله اول قصد داریم یک پراپرتی جدید بنام isDate از نوع boolean به کنترل اضافه کنیم تا در صورت True  بودن مقداری جز تاریخ از کاربر نگیرد.

برای شروع کار و افزودن پراپرتی به یوزر کنترل در پروژه سی شارپ ابتدا کد زیر را به برنامه اضافه میکنیم:


 private Boolean ID = false;
public bool IsDate
{
   get
   {
      return ID;
   }
   set
   {
      ID = value;
      if (ID == true)
      {
         this.Text = "13__/__/__";
         this.Multiline = false;
      }
      else
      {
         this.Text = "";
      }
   }
}

نکته:

در کد بالا برای نگهداری مقدار ورودی و خروجی پراپرتی ست شده برای کاربر ابتدا باید فیلد ID را برای کنترل تعریف کرد.

اگر مقدار ست شده True  باشد کنترل باید بصورت خودکار مقدار پیشفرض داده Text خود را بصورت فرمت تاریخ تغییر دهد.

پس از تعریف کردن این مقدار باید کلیدهای دریافتی از کاربر در حالت اجرای برنامه را دریافت کرده و بر اساس فرمت تاریخ فیلتر کرده و در تکست باکس نمایش دهیم.

برای اینکار کد زیر را به برنامه اضافه میکنیم:


protected override void OnKeyPress(KeyPressEventArgs e)
{
   if (this.Multiline == true && e.KeyChar == '\n') return;
   string ValidChar = "";
   if (IsDate == true)
   {
      if (Convert.ToInt16(e.KeyChar) == 8)
      {
         if (this.SelectionStart == 5 || this.SelectionStart == 8)
         {
            this.SelectionStart--;
         }
     else
     {
        if (this.SelectionStart > 0)
        {
           int l = this.SelectionStart;
           this.Text = this.Text.Substring(0, this.SelectionStart - 1) + "_" + this.Text.Substring(this.SelectionStart);
           this.SelectionStart = l - 1;
        }
    }
    e.KeyChar = Convert.ToChar(0);
    base.OnKeyPress(e);
    return;
  }
   if (this.SelectionStart < 10)
   {
      this.SelectionLength = 1;
   }
   if (this.SelectionStart == 0) ValidChar = "12";
   if (this.SelectionStart == 1 || this.SelectionStart == 2 || this.SelectionStart == 3) ValidChar = "0123456789";
   if (this.SelectionStart == 5) ValidChar = "01";
   if (this.SelectionStart == 6)
   {
      if (this.Text.Substring(5, 1) == "0") ValidChar = "123456789";
      if (this.Text.Substring(5, 1) == "1") ValidChar = "012";
   }
   if (this.SelectionStart == 4 || this.SelectionStart == 7)
   {
      ValidChar = "/";
      this.SelectionStart += 1;
   }
   if (this.SelectionStart == 8) ValidChar = "0123";
   if (this.SelectionStart == 9)
   {
      if (this.Text.Substring(8, 1) == "1" || this.Text.Substring(8, 1) == "2") ValidChar = "0123456789";
      if (this.Text.Substring(8, 1) == "0") ValidChar = "123456789";
      if (this.Text.Substring(8, 1) == "3")
   {
   if (this.Text.Substring(5, 2) == "01" ||
   this.Text.Substring(5, 2) == "02" ||
   this.Text.Substring(5, 2) == "03" ||
   this.Text.Substring(5, 2) == "04" ||
   this.Text.Substring(5, 2) == "05" ||
   this.Text.Substring(5, 2) == "06")
      ValidChar = "01";
      else ValidChar = "0";
    }
  }
   if (ValidChar.Contains(e.KeyChar) == false) e.KeyChar = Convert.ToChar(0);
   base.OnKeyPress(e);
  }
   base.OnKeyPress(e);
}

نکته:

پس از هر بار چک کردن فرمت تاریخ با دستور  base.OnKeyPress ادامه عملیات را به حالت معمول رویداد برمیگردانیم.

اکنون برای کنترل بهتر و بیشتر فرمت تاریخ ورودی از رویداد TextChange نیز استفاده میکنیم تا اگر کاراکتر غیر متعارف نیز در حالت تغییر یا مثلا کپی پیست وارد یوزر کنترل شد آنرا نیز هندل کنیم:


protected override void OnTextChanged(EventArgs e)
{
   if (IsDate == true)
{
   try
   {
     int m = Convert.ToInt32(this.Text.Substring(5, 2));
     int d = Convert.ToInt32(this.Text.Substring(8, 2));
     FarsiDate = ChangeDateToChar(m, d);
   }
   catch { FarsiDate = "فرمت غير قابل قبول"; }
}
else FarsiDate = "فيلد تاريخ نيست";
base.OnTextChanged(e);
}

اکنون برای افزودن یک تابع یا متد به کنترل در سی شارپ c# به روش زیر عمل میکنیم:

فرض کنید میخواهیم یک تابع به کنترل بیفزاییم تا با استفاده از آن یک مقدار تاریخ را به صورت رشته برگردانیم.

مثلا با ارسال “1397/01/01” رشته: “یکم فروردین” خروجی برگرداند.

برای این منظور ابتدا کد زیر را به برنامه اضافه میکنیم:


private string ChangeDateToChar(int Mounth,int Day)
{
   string ret = "";
   ret = NumberToChar(Day) + " " + ChangeMounth (Mounth);
   return ret;
}

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


private string NumberToChar(int d)
{
switch (d)
{
case 1: return "يكم";
case 2: return "دوم";
case 3: return "سوم";
case 4: return "چهارم";
case 5: return "پنجم";
case 6: return "ششم";
case 7: return "هفتم";
case 8: return "هشتم";
case 9: return "نهم";
case 10: return "دهم";
case 11: return "يازدهم";
case 12: return "دوازدهم";
case 13: return "سيزدهم";
case 14: return "چهاردهم";
case 15: return "پانزدهم";
case 16: return "شانزدهم";
case 17: return "هفدهم";
case 18: return "هجدهم";
case 19: return "نوزدهم";
case 20: return "بيستم";
case 21: return "بيست ويكم";
case 22: return "بيست و دوم";
case 23: return "بيست و سوم";
case 24: return "بيست و چهارم";
case 25: return "بيست پنجم";
case 26: return "بيست و ششم";
case 27: return "بيست و هفتم";
case 28: return "بيست و هشتم";
case 29: return "بيست و نهم";
case 30: return "سي ام";
case 31: return "سي و يكم";
default: return "نامشخص";
}
}

و :


private string ChangeMounth(int Mounth)
{
switch (Mounth)
{
case 1: return "فروردين";
case 2: return "ارديبهشت";
case 3: return "خرداد";
case 4: return "تير";
case 5: return "مرداد";
case 6: return "شهريور";
case 7: return "مهر";
case 8: return "آبان";
case 9: return "آذر";
case 10: return "دي";
case 11: return "بهمن";
case 12: return "اسفند";
default: return "نامشخص";
}
}

اکنون میتوانیم از کد زیر برای استفاده از کنترل dll ساخته شده در سی شارپ c# در فرم اصلی برنامه استفاده کنیم:


private void textClass1_TextChanged(object sender, EventArgs e)
{
   this.Text = textClass1.FarsiDate;
}

ساخت کنترل dll یوزر کنترل User Control در سی شارپ c#

در ادامه آموزش ساخت user control یوزر کنترل dll در سی شارپ c# یک پروژه ضمیمه شده است که علاوه بر موارد گفته شده فوق تعدادی خاصیتهای دیگه مانند فونت و تاریخ نیز تعریف شده است که در جلسات بعدی روش ساخت و هندل کردن آنها نیز بصورت کامل آموزش داده خواهد شد.

دانلود سورس کد ساخت یوزر کنترل در سی شارپ