كيفية عمل اداة تحكم textBox مخصصه بها مميزات غير موجودة في textBox العادية
فيما يلي
تعريف مربع نص مخصص. لديها كل الميزات القوية لمربع النص ، تدير
المظهر تلقائيًا ، ويوفر إمكانية تحرير معقدة للمستخدم ، ويهتم
التفاصيل الأساسية مثل رسم نفسها وإدارة التركيز. بالإضافة إلى ذلك ، يضيف مربع النص المخصص
ميزه جديده تجعلها أكثر فائدة للتعامل مع البيانات الرقمية في الغالب (مثل الهاتف
أعداد). لديها خاصية تقوم بإرجاع العدد الإجمالي للأحرف الرقمية في النص
سلسلة (NumberOfDigits) ،
وايضاً برمجة هذه الاداة وتجعلها تقبل ارقام فقط
الكود :
public class MyTextBox : System.Windows.Forms.TextBox
{
public int NumberOfDigits
{
get
{
int digits = 0;
foreach (char c in Text)
{
if (Char.IsDigit(c)) digits++;
}
return digits;
}
}
{
public int NumberOfDigits
{
get
{
int digits = 0;
foreach (char c in Text)
{
if (Char.IsDigit(c)) digits++;
}
return digits;
}
}
bool numbersOnly;
public MyTextBox()
{
numbersOnly = false;
}
public bool NumbersOnly
{
get { return this.numbersOnly; }
set { this.numbersOnly = value; }
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
base.OnKeyPress(e);
}
}
في البداية قمنا بالوراثة من الفئة TextBox وقمنا بكتابة أسماء الفضاءات
وذلك لانك عندما تقم بانشاء كلاس لايتم تضمين فضاء System.Windows.Forms
بامكانك تضمينه وحذف أسماء الفضاءات التي قبل TextBox
الخاصية الأولى وظيفتها تقوم بمعرفه عدد خانات الأرقام المكتوبة في MyTextBox خاصية قراءة فقط لذالك عندما تشاهدها في قائمة الخصائص ستلاحظ ان لون النص مختلف عن باقي الخصائص وذلك يعني انك لاتستطيع اسناد قيمه لها وذلك لانها خاصية get فقط
ولكي تقوم بمعرفه كيف تستدعي هذه الخاصية بهذا الشكل
الان ننتقل الى الدالة OnKeyPress
دالة ناسخة من نوع void تنسخ الدالة الوهمية الموجودة في الكلاس Control
هذه الدالة تقوم بفحص ادخال المستخدم اذا كانت حروف تمنع الكتابة في MyTextBox
اذا كانت ارقام تسمح بالكتابة
بعد ذالك قمنا بارسال وسيط هذه الدالة الى الدالة الأساسية باستخدام الكلمة base
وسيط هذه الدالة هوعبارة عن حدث يحدث عند الضغط بازرار الكيبورد
الان انتهينا من عمل أداة التحكم الجديدة
قم الان بالضغط على اختصار ctrl+shift+B
لكي يتم إعادة بناء المشروع ومن ثم اذهب الى قائمة ToolBox
وابحث عن الأداة الجديدة MyTextBox
قم باضافتها للفورم وقم بتنفيذ ستلاحظ انك لن تستطيع كتابة حروف
تقبل ارقام فقط
شيء ممل ان تكون هذه الأداة لاتقبل الا ارقام فقط ما رائيك ان نجعلها في حالة تدعم ارقام وفي حالة أخرى تدعم سلسلة نصية سوا كانت ارقام وحروف
ماهي هذه الحالات تابع معي
نقوم بتعريف متغير bool numbersOnly ارقام فقط
ونقوم بتعريف خاصية لهذا المتغير
اذا كانت false ارقام وحروف
تم جعل قيمتها الافتراضية ب false
يمكنك تغيير قيمة هذه الخاصية الى true من قائمة الخصائص بعد ما نكمل الشرح
الان نقوم باخر خطوة وهي إضافة شرط في دالة OnKeyPress
وذلك لانك عندما تقم بانشاء كلاس لايتم تضمين فضاء System.Windows.Forms
بامكانك تضمينه وحذف أسماء الفضاءات التي قبل TextBox
الخاصية الأولى وظيفتها تقوم بمعرفه عدد خانات الأرقام المكتوبة في MyTextBox خاصية قراءة فقط لذالك عندما تشاهدها في قائمة الخصائص ستلاحظ ان لون النص مختلف عن باقي الخصائص وذلك يعني انك لاتستطيع اسناد قيمه لها وذلك لانها خاصية get فقط
ولكي تقوم بمعرفه كيف تستدعي هذه الخاصية بهذا الشكل
MessageBox.Show(myTextBox1.NumberOfDigits.ToString());
الان ننتقل الى الدالة OnKeyPress
دالة ناسخة من نوع void تنسخ الدالة الوهمية الموجودة في الكلاس Control
هذه الدالة تقوم بفحص ادخال المستخدم اذا كانت حروف تمنع الكتابة في MyTextBox
اذا كانت ارقام تسمح بالكتابة
بعد ذالك قمنا بارسال وسيط هذه الدالة الى الدالة الأساسية باستخدام الكلمة base
وسيط هذه الدالة هوعبارة عن حدث يحدث عند الضغط بازرار الكيبورد
الان انتهينا من عمل أداة التحكم الجديدة
قم الان بالضغط على اختصار ctrl+shift+B
لكي يتم إعادة بناء المشروع ومن ثم اذهب الى قائمة ToolBox
وابحث عن الأداة الجديدة MyTextBox
قم باضافتها للفورم وقم بتنفيذ ستلاحظ انك لن تستطيع كتابة حروف
تقبل ارقام فقط
شيء ممل ان تكون هذه الأداة لاتقبل الا ارقام فقط ما رائيك ان نجعلها في حالة تدعم ارقام وفي حالة أخرى تدعم سلسلة نصية سوا كانت ارقام وحروف
ماهي هذه الحالات تابع معي
نقوم بتعريف متغير bool numbersOnly ارقام فقط
ونقوم بتعريف خاصية لهذا المتغير
public bool NumbersOnly
{
get { return this.numbersOnly; }
set { this.numbersOnly = value; }
}
في حالة كانت قيمة هذه الخاصية true سوف يتم كتابة ارقام فقط اذا كانت false ارقام وحروف
تم جعل قيمتها الافتراضية ب false
يمكنك تغيير قيمة هذه الخاصية الى true من قائمة الخصائص بعد ما نكمل الشرح
public MyTextBox()
{
numbersOnly = false;
}
اسناد القيمة الافتراضية للخاصية داخل دالة البناء للفئةالان نقوم باخر خطوة وهي إضافة شرط في دالة OnKeyPress
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)&& NumbersOnly==true)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
}
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)&& NumbersOnly==true)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
}
الكود كامل :
public class MyTextBox : System.Windows.Forms.TextBox
{
public int NumberOfDigits
{
get
{
int digits = 0;
foreach (char c in Text)
{
if (Char.IsDigit(c)) digits++;
}
return digits;
}
}
{
public int NumberOfDigits
{
get
{
int digits = 0;
foreach (char c in Text)
{
if (Char.IsDigit(c)) digits++;
}
return digits;
}
}
bool numbersOnly;
public MyTextBox()
{
numbersOnly = false;
}
public bool NumbersOnly
{
get { return this.numbersOnly; }
set { this.numbersOnly = value; }
}
protected override void OnKeyPress(KeyPressEventArgs e)
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)&&NumbersOnly==true)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
}
public MyTextBox()
{
numbersOnly = false;
}
public bool NumbersOnly
{
get { return this.numbersOnly; }
set { this.numbersOnly = value; }
}
protected override void OnKeyPress(KeyPressEventArgs e)
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)&&NumbersOnly==true)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
}
تعليقات
إرسال تعليق