الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

جعل صندوق النصوص يقبل العمليات الحسابية بدون استخدام الخاصية Text ودوال تحويل الأنواع

بدأه محمد سامر أبو سلو في 26 مارس 2008 · 7 رد · 4,761 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ذكرني خطأ واجهه أحد الإخوة في أحد المنتديات بموضوع قديم لي بعنوان التحميل الزائد للمعاملات Operators Overloading الذي أرجو من كل من يريد فهم ما سأقوم به هنا بقراءة وفهم الموضوع المذكور جيدا قبل المتابعة هنا لأنني سأورد خطوات سريعة فقط هنا

فمثلا إن كنت تريد القيام بعملية ضرب قيمة ما يوجد داخل صندوق النصوص بـ 10 مثلا فكلكم سيقول أن بيئة التطوير لن تقبل الكود التالي

a = TextBox1 * 10

وفي موضوعي هذا سأقوم بإقناع بيئة التطوير بقبوله تطبيقا على موضوعي القديم

- أنشئ مشروعا جديدا وضع فيه صندوق نصوص و زر أوامر فقط

- من قائمة Project اختر الأمر Add Class و سم الفئة الجديدة MyTextBox وسنرثها من صندوق النصوص العادي المستخدم

- أدخل الكود التالي في الفئة الجديدة الذي سيكون الكود الكامل للفئة

Public Class MyTextBox
	Inherits TextBox

	Public Shared Operator *(ByVal Op1 As MyTextBox, ByVal op2 As Integer) As Integer
		Return (CInt(Op1.Text) * op2)
	End Operator

	Public Shared Operator *(ByVal op2 As Integer, ByVal Op1 As MyTextBox) As Integer
		Return (CInt(Op1.Text) * op2)
	End Operator

End Class

- اعمل build للمشروع

- في Solution Explorer اضغط الزر Show All Files ثم وسع العقدة Form1.vb وافتح محرر الكود الخاص بالملف Form1.Designer.vb واستبدل النص System.Windows.Forms.TextBox أينما ورد باسم فئتنا الجديدة MyTextBox

- قم بالحفظ وأغلق كافة الملفات المفتوحة ثم قم بفتح محرر النماذج الخاص بـ Form1 وانقر نقرا مزدوجا على الزر ليتم إضافة معالج حدث للنقر على زر الأوامر وضع فيه الكود التالي

		Dim a As Integer = TextBox1 * 34
		Dim b As Integer = 65 * TextBox1

		MsgBox(a.ToString & vbCrLf & b.ToString)

سترى نتيجة الكود الذي وضعناه في فئتنا الجديدة أن صندوق النصوص أصبح يقبل عملية الضرب مباشرة بدون استخدام الخاصية Text و دوال التحويل بين الأنواع

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

جميل جدا وشرح رائع اخي محمد سامر بارك الله فيك والى الامام دوما

انا افكر اذا انا مبدع .... I think therfore I am Creative

#3

يعطيك العافية

ولكن لو قمت بانشاء dll على شكل تولز ويصير الشباب يستخدموه بدل التكست بوكس اللي في التولز توفر عليهم تعديل كلمة تكست بكس في كل مكان :)

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#4

اخي الكريم

عفوا علي المداخله

الكود التالي سيسمح فقط بادخال ارقام داخل التكست بوكس

ربما يكون مفيدا لبعض الاخوه الذين يستخدمون الفيجوال بيسك 2005 او 2008


'allow only numbers, the Backspace key and the period

If (e.KeyChar < "0" OrElse e.KeyChar > "9") _
AndAlso e.KeyChar <> ControlChars.Back AndAlso e.KeyChar <> "." Then
'cancel keys
e.Handled = True
End If

End Sub
Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

اخوك عمر

تم تعديل هذه المشاركة بواسطة a_pess في 26 مارس 2008 في 13:51

#5

السلام عليكم ..

يعجبني في هذا الطرح انك لن تحصر نفسك في ماهو موجود لديك

بغض النظر عن خطوات التنفيذ

فأنت صحيح لم تستخدم الخاصية Text و دوال التحويل بين الأنواع في كود زر الأمر

ولكنك استخدمتها بل يجب أن تستخدمها في الـ Operator

ولا ضير في ذلك كفكره

ومثل هذه الأفكار ستفتح للشخص آفاق جديده في التعامل مع الكونترولز

يعطيك العافيه

#6
Romantic_touch كتب:
يعطيك العافية

ولكن لو قمت بانشاء dll على شكل تولز ويصير الشباب يستخدموه بدل التكست بوكس اللي في التولز توفر عليهم تعديل كلمة تكست بكس في كل مكان :)

أنا أطرح فطرة العمل فقط - يعني اعتبرها مشاركة خاطرة سريعة مع أعضاء المنتدى

إذا رغب أحد بعمل مكتبة DLL وطرحها في المنتدى مع الكود المصدري لها فأهلا به وهذا كلاس محدث عن المذكور في المشاركة الأولى يتضمن العمليات الحسابية الأربع

Public Class MyTextBox
	Inherits TextBox

	Public Shared Operator *(ByVal Op1 As MyTextBox, ByVal op2 As Integer) As Integer
		Return (CInt(Op1.Text) * op2)
	End Operator

	Public Shared Operator *(ByVal op2 As Integer, ByVal Op1 As MyTextBox) As Integer
		Return (CInt(Op1.Text) * op2)
	End Operator

	Public Shared Operator +(ByVal a As MyTextBox, ByVal b As Integer) As Integer
		Return (CInt(a.Text) + b)
	End Operator

	Public Shared Operator +(ByVal b As Integer, ByVal a As MyTextBox) As Integer
		Return (CInt(a.Text) + b)
	End Operator

	Public Shared Operator -(ByVal a As MyTextBox, ByVal b As Integer) As Integer
		Return (CInt(a.Text) - b)
	End Operator

	Public Shared Operator -(ByVal b As Integer, ByVal a As MyTextBox) As Integer
		Return (b - CInt(a.Text))
	End Operator

	Public Shared Operator /(ByVal a As MyTextBox, ByVal b As Integer) As Double
		Return (CInt(a.Text) / b)
	End Operator

	Public Shared Operator /(ByVal b As Integer, ByVal a As MyTextBox) As Double
		Return (b / CInt(a.Text))
	End Operator

End Class

- لاحظ انني هنا تعاملت مع النوع Integer فقط كمثال على الفكرة الأساسية ومن أراد عمل DLL كما اقترحت يجب عليه بناء كود يتعامل مع مختلف الأنواع الرقمية

- هناك فكرة إضافية لاأعرف مدى إمكان تطبيقها في الوقت الحاضر وهي دمج موضوع Partial Class مع هذا الموضوع فعندها يمكننا عمل فئة - أو مكتبة - توسع الصنف TextBox الأساسي ذات نفسه. ولكنني فشلت حتى لحظة كتابة هذه السطور بعمل ذلك بصورة سليمة

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 26 مارس 2008 في 15:24

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#7
a_pess كتب:
اخي الكريم

عفوا علي المداخله

الكود التالي سيسمح فقط بادخال ارقام داخل التكست بوكس

ربما يكون مفيدا لبعض الاخوه الذين يستخدمون الفيجوال بيسك 2005 او 2008

اخوك عمر

شكرا لك - الكود المذكور موجود سابقا في المنتدى بأكثر من موضوع - ولكنه غير مناسب مع موضوعي هذا

أنا هنا أناقش موضوع Operators Overloading من خلال بعض التطويرات على الفئة TextBox حصريا - يرجى الالتزام بالموضوع الأساسي للنقاش وعدم طرح أي كود لاعلاقة له بالفكرة الأساسية للموضوع وهي Operators Overloading

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 26 مارس 2008 في 15:15

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#8
محمد سامر أبو سلو كتب:
- هناك فكرة إضافية لاأعرف مدى إمكان تطبيقها في الوقت الحاضر وهي دمج موضوع Partial Class مع هذا الموضوع فعندها يمكننا عمل فئة - أو مكتبة - توسع الصنف TextBox الأساسي ذات نفسه. ولكنني فشلت حتى لحظة كتابة هذه السطور بعمل ذلك بصورة سليمة

نتيجة البحث تبين أن بعض الفئات - التحكمات - الموجودة في Visual Basic Runtime لا يمكن توسيعهم باستخدام Partial Class ولكن يمكن توسيعهم باستخدام Extension Methods وذلك كما ورد في موضوعي إنشاء مكتبة تضيف وظائف جديدة للتحكمات الموجودة بدون استخدام الوراثة أو باستخدم الطريقة القديمة وراثة فئة جديدة منها وإضافة الخصائص المرغوبة للفئة الجديدة

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 19 أبريل 2008 في 14:59

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

مواضيع مشابهة