Позднее связывание и строгий вариант - PullRequest
1 голос
/ 27 ноября 2011

У меня проблема с поздним связыванием: я создаю приложение со списком продуктов.У меня есть класс с именем Item, в котором хранятся name, price, quantity и description предмета в списке покупок.

У меня есть модуль с именем ListCollection, который определяет Collection из Item объектов.Я создал форму Edit, которая будет автоматически отображать выбранные в данный момент свойства элемента ListCollection, но всякий раз, когда я пытаюсь заполнить текстовые поля, он говорит мне, что Option Strict запрещает позднюю привязку.

Я МОГУ выбрать простой маршрут и отключить Option Strict, но я бы предпочел выяснить, в чем проблема, чтобы я знал для дальнейшего использования.

Я вставлю соответствующий код здесь.(Ошибка позднего связывания в EditItem.vb.)

Код Item.vb:

' Member variables:
Private strName As String

' Constructor
Public Sub New()
    strName = ""

' Name property procedure
Public Property Name() As String
    Get
        Return strName
    End Get
    Set(ByVal value As String)
        strName = value
    End Set
End Property

Код ListCollection.vb:

' Create public variables.
Public g_selectedItem As Integer ' Stores the currently selected collection item.

' Create a collection to hold the information for each entry.
Public listCollection As New Collection

' Create a function to simplify adding an item to the collection.
Public Sub AddName(ByVal name As Item)
    Try
        listCollection.Add(name, name.Name)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

Код EditItem.vb:

Private Sub EditItem_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    ' Set the fields to the values of the currently selected ListCollection item.
    txtName.Text = ListCollection.listCollection(g_selectedItem).Name.Get ' THIS LINE HAS THE ERROR!

Я попытался объявить переменную String и присвоить ей свойство Item, а также попытался получить значение непосредственно из элемента List (без использования Getфункция), и ни один из них не имеет значения.

Как я могу решить эту проблему?

1 Ответ

2 голосов
/ 27 ноября 2011

Вы должны привести предмет из «Объекта» к вашему типу («EditItem»).

http://www.codeproject.com/KB/dotnet/CheatSheetCastingNET.aspx

EDIT:

Private Sub EditItem_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    ' getting the selected item
    Dim selectedItem As Object = ListCollection.listCollection(g_selectedItem)

    ' casting the selected item to required type
    Dim editItem As EditItem = CType(selectedItem, EditItem)

    ' setting value to the textbox
    txtName.Text = editItem.Name

Я ничего не кодировал в VB.NET годами, надеюсь, все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...