Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: CType(expression, typename) - ошибка... Добавлено: 16.08.11 23:43  

Автор вопроса:  DimBi
Помогите разобраться...
Не удается получить свойства выделенного объекта в ListBox....

При выполнении процедуры

Private Sub GetPropertyObj(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBoxDemo.DoubleClick
        Dim str As String
        str = CType(ListBoxDemo.SelectedItem, Person).Name
        MessageBox.Show(str)
    End Sub


генерируется исключение:
Не удалось привести тип объекта "System.String" к типу "WAppCType.Person"

--------------------------------------------------
вот весь код...

Public Class Person
    Private _name As String
    Private _ssn As String

    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Property SSN() As String
        Get
            Return _ssn
        End Get
        Set(ByVal value As String)
            _ssn = value
        End Set
    End Property

    Public Overloads Function ToString() As String
        Return String.Format("{0} : {1}", SSN, Name)
    End Function
End Class


Public Class Form1
    
    Private Sub BtnPopulateList_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPopulateList.Click
        Dim P As Person
        Dim i As Integer
        For i = 0 To 19
            P = New Person()
            P.Name = "Имя: " & i
            P.SSN = "999-55-00" & i.ToString("00")
            If ListBoxDemo.FindStringExact(P.ToString) = -1 Then
                ListBoxDemo.Items.Add(P.ToString)
            Else
                MessageBox.Show(String.Format("Элемент {0} уже существует!", P.ToString))
            End If
        Next
    End Sub

     Private Sub GetPropertyObj(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBoxDemo.DoubleClick
        Dim str As String
        str = CType(ListBoxDemo.SelectedItem, Person).Name 'здесь генерируется ошибка
        MessageBox.Show(str)
    End Sub
End Class


Где ошибка???
Help me, please!!!

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #1 Добавлено: 17.08.11 00:13
Формально: имеется преобразование из класса Person в тип String, но нет обратного преобразования.

Кароче.. ты в ListBoxDemo подсовываешь просто строку, а потом пытаешься из строки воссоздать объект. Подумай.

Ответить

Номер ответа: 2
Автор ответа:
 DimBi



Вопросов: 15
Ответов: 55
 Профиль | | #2 Добавлено: 17.08.11 01:20
Если подсовываю объект:
  1. ListBoxDemo.Items.Add(P)

то ошибка не возникает...
только в ListBoxDemo выводятся не строковые данные, а тип объекта...

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 17.08.11 01:26
Если подсовываю объект:

именно это и надо делать
+ надо установить свойство DisplayMember в Name чтоб отображался не тип данных а нужное тебе значение

Ответить

Номер ответа: 4
Автор ответа:
 DimBi



Вопросов: 15
Ответов: 55
 Профиль | | #4 Добавлено: 17.08.11 01:45
не получается...
  1. For i = 0 To 19
  2.             P = New Person()
  3.             P.Name = "Имя: " & i
  4.             P.SSN = "999-55-00" & i.ToString("00")
  5.             ListBoxDemo.Items.Add(P)
  6.             ListBoxDemo.DisplayMember = P.Name
  7.         Next

или
  1. ListBoxDemo.DisplayMember = Name

всё одно...
где ошибка, не пойму...

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 17.08.11 09:44
  1. ListBoxDemo.DisplayMember = "Name"

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 17.08.11 11:52
Artyom пишет:
ListBoxDemo.DisplayMember = "Name"


Надеюсь, ты понимаешь что эту строку тебе надо вынести ЗА цикл? Лучше всего в Load формы..

Ответить

Номер ответа: 7
Автор ответа:
 DimBi



Вопросов: 15
Ответов: 55
 Профиль | | #7 Добавлено: 17.08.11 12:23
Спасибо за помощь!!!
разобрался...
переделал так:
  1.  
  2. Public Class Person
  3.     Private _name As String
  4.     Private _ssn As String
  5.  
  6.     Public Property Name() As String
  7.         Get
  8.             Return _name
  9.         End Get
  10.         Set(ByVal value As String)
  11.             _name = value
  12.         End Set
  13.     End Property
  14.  
  15.     Public Property SSN() As String
  16.         Get
  17.             Return _ssn
  18.         End Get
  19.         Set(ByVal value As String)
  20.             _ssn = value
  21.         End Set
  22.     End Property
  23.  
  24.     Public ReadOnly Property ID() As String
  25.         Get
  26.             Return String.Format("{0} : {1}", SSN, Name)
  27.         End Get
  28.     End Property
  29. End Class



  1.  
  2. Public Class Form1
  3.  
  4.     Sub New()
  5.         InitializeComponent()
  6.         ListBoxDemo.DisplayMember = "ID"
  7.     End Sub
  8.  
  9.     Private Sub BtnPopulateList_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPopulateList.Click
  10.         Dim P As Person
  11.         Dim i As Integer
  12.  
  13.         For i = 0 To 99
  14.             P = New Person()
  15.             P.Name = "Имя: " & i
  16.             P.SSN = "999-55-00" & i.ToString("00")
  17.             ListBoxDemo.Items.Add(P)
  18.         Next
  19.     End Sub
  20.  
  21.     Private Sub BtnClearList_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnClearList.Click
  22.         ListBoxDemo.Items.Clear()
  23.     End Sub
  24.  
  25.     Private Sub GetPropertyObj(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBoxDemo.DoubleClick
  26.         Dim str As String
  27.         str = CType(ListBoxDemo.SelectedItem, Person).Name
  28.         MessageBox.Show(str)
  29.     End Sub
  30.  
  31. End Class



Теперь всё работает как надо!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам