سؤال

أريد تمديد الأساسية 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top