توسيع مجموعة التحكم في VB.NET
-
02-07-2019 - |
سؤال
أريد تمديد الأساسية ControlCollection
في VB.NET حتى أتمكن من إضافة الصور والنصوص إلى عنصر تحكم ذاتي الصنع، ثم تحويلها تلقائيًا إلى مربعات صور وملصقات.
لذلك قمت بإنشاء فئة ترث من ControlCollection، وتجاوزت طريقة الإضافة، وأضفت الوظيفة.
ولكن عندما أقوم بتشغيل المثال، فإنه يعطي NullReferenceException
.
هنا هو الرمز:
Shadows Sub add(ByVal text As String)
Dim LB As New Label
LB.AutoSize = True
LB.Text = text
MyBase.Add(LB) 'Here it gives the exception.
End Sub
لقد بحثت في جوجل، وقال أحدهم أن CreateControlsInstance
يجب تجاوز الأسلوب.لذلك فعلت ذلك، ولكن بعد ذلك يعطي InvalidOperationException
مع ال innerException
رسالة من NullReferenceException
.
كيف يمكنني تنفيذ هذا؟
المحلول
لماذا لا ترث من تحكم المستخدم لتحديد عنصر تحكم مخصص له خصائص مثل النص والصورة؟
نصائح أخرى
ربما يكون من الأفضل لك استخدام مجموعة عامة فقط على أي حال.لا تقوم مجموعة Bieng Control Collection بأي شيء خاص لها حقًا.
puclic class MyCollection : Collection<Control>
إذا كنت ترث من Control.ControlCollection فأنت بحاجة إلى توفير طريقة جديدة في صفك.يجب أن تستدعي الطريقة الجديدة منشئ ControlCollection (MyBase.New) وتمريرها إلى عنصر تحكم أصلي صالح.
إذا لم تقم بذلك بشكل صحيح، فسيتم طرح NullReferenceException في طريقة الإضافة.
قد يكون هذا أيضًا سببًا في حدوث InvalidOperationException في أسلوب CreateControlsInstance الخاص بك
التعليمة البرمجية التالية تستدعي المنشئ بشكل غير صحيح مما يتسبب في قيام أسلوب الإضافة بإلقاء NullReferenceException...
Public Class MyControlCollection
Inherits Control.ControlCollection
Sub New()
'Bad - you need to pass a valid control instance
'to the constructor
MyBase.New(Nothing)
End Sub
Public Shadows Sub Add(ByVal text As String)
Dim LB As New Label()
LB.AutoSize = True
LB.Text = text
'The next line will throw a NullReferenceException
MyBase.Add(LB)
End Sub
End Class