2016-01-26 5 views
-1

Gyzz Я пытаюсь создать пользовательский элемент управления с свойством только для чтения (Of Points). У меня возникли проблемы с инициализацией и использованием этого свойства! Помогите мне, я довольно новичок в визуальной основе.Работа с Readonly List Property

UserControl1:

Public Class PointEntryPanel 

Dim P as List(of PointF) = New List(Of PointF) 
Public ReadOnly Property Points as List(Of PointF) 
    Get 
     P = Points 
     return P 
    End Get 
End Property 

End Class 

Форма:

Public Class Form1 

Private Sub Form1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDoubleClick 


    ListBox1.Items.Add("You see ,No null reference exceptions") 
    ListBox1.Items.Add("I want a property just like this") 
    PointEntryPanel1.Points.Add(New PointF(0, 0)) 'While this creates exceptions 
    PointEntryPanel1.Points.Add(New PointF(1, 1)) 'And the point is not added to the PList 
    MessageBox.Show(PointEntryPanel1.PArray.ToString) 'this shows an empty box 

End Sub 

End Class 

Я хочу, чтобы закодировать свойство так же, как свойство 'предметов' в элементе управления List Box

+0

Является 'PointEntryPanel1' во втором блоке предполагается,' UserControl1' и 'PArray' предполагается использовать «Баллы»? Как это не работает с ответом Магнуса? – Plutonix

+0

Yup, спасибо, что уведомил об этом, это была ошибка !!! Я получаю исключение с нулевой ссылкой и точки не добавляются методом «Points.Add»! –

+0

'Dim P as List (of PointF) = Новый список (Of Points)' не компилируется. если вы исправите это и просто «вернете P» в геттере, как в ответе, он будет работать нормально – Plutonix

ответ

1

Вы должны создать экземпляр P и затем вернуть его в собственность

Private p As New List(of PointF) 
Public ReadOnly Property Points as List(Of PointF) 
    Get 
     return p 
    End Get 
End Property 
+0

жаль, что я забыл вставить новое ключевое слово во время написания этого сообщения! Но я получаю нулевую ссылку на «P = Points», и ничего не добавляется в PArray на «PointEntryPanel1.PArray.Add (New PointF (0, 0))» !! Это моя проблема –

+0

Пропустить 'P = Points' и просто вернуть' P' – Magnus

+0

По-прежнему 'PointEntryPanel1.PArray.Add (New PointF (0, 0))' ничего не делает! Мне нужна эта строка, чтобы изменить список «P» в UserControl1 !!!! –

0

Вам необходимо создать экземпляр нового списка (от T). Используйте «новое», чтобы сделать это.

Например:

Private Points As New List(Of Point) 'instantiate the List(of T) 


Public ReadOnly Property AllPoints As List(Of Point) 
    Get 
     Return Points 
    End Get 
End Property 

Вы можете сделать что-то вроде этого, а также:

Public ReadOnly Property GetAllPoints As List(Of String) 
    Get 
     Return Points 
    End Get 
End Property 
'property only to return the List (for instance visible to 
'users if you want to create a classlibrary.) 



Private Property AllPoints As List(Of String) 
    Set(value As List(Of String)) 
     If (Points.Equals(value)) Then Exit Property 
     Points.Clear() 
     Points.AddRange(value.ToArray) 
    End Set 
    Get 
     Return Points 
    End Get 'return the points 
End Property 
'Property to set and get the list (not visible in a classlibrary because it 
is private) 
'this can be used in the class you have pasted it only. 
+0

Я хочу, чтобы это свойство PArray, как свойство «Items» в элементе управления List Box! Я могу добавить отдельные дескрипторы методов в пользовательский элемент управления для добавления, удаления и управления элементами в P, но это усложняет мою работу! Это было бы намного проще, верно! –

Смежные вопросы