Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 | 3 |

 

  Вопрос: VB2005 массивы Добавлено: 08.03.07 19:50  

Автор вопроса:  -=Fenix=-
У меня есть массив к которому привязаны свойства через Structure. Есть ли ф-ия или св-во что бы убить в середине запись и массив сдвинулся на 1 убитую запись? Или всёже нада пересобирать массив, т.е. писать отдельную ф-ию?

Ответить

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

Номер ответа: 1
Автор ответа:
 -=Fenix=-



Вопросов: 33
Ответов: 81
 Профиль | | #1 Добавлено: 08.03.07 20:08
И можно ли так же убить элемент св-ва этого массива? если свойство тоже предстваляет массив

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 09.03.07 00:34
RemoveAt или Remove
Разница в том, что в первом случае в качестве параметра передаешь индекс элеменна массива, а во втором непосредственно объект..

Ответить

Номер ответа: 3
Автор ответа:
 -=Fenix=-



Вопросов: 33
Ответов: 81
 Профиль | | #3 Добавлено: 09.03.07 09:44
Ах, если было бы всё так просто. Вот у меня код

//Обьявление в классе Class
Structure Test
  ;Dim TestA As String
  ;Dim TestB As String
End Structure

//Процедура
Dim Tests() as Class.Test
ReDim tests(3)

Tests(1).TestA = "123"
Tests(2).TestA = "345"
Tests(3).TestA = "567"

После этого, св-во Remove можно применить как нистранно только TestA или TestB, а к самому обьекту нельзя. Как быть?

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 09.03.07 16:18
Сорри .. просмотрел, что речь идео о "чистом" массиве.
В этом случае придется пересобирать его заново..
Я для удобства операций обычно пользуюсь его наследником ArrayList или любой другой коллекцией. В них все эти операции операции предусмотрены..

Ответить

Номер ответа: 5
Автор ответа:
 -=Fenix=-



Вопросов: 33
Ответов: 81
 Профиль | | #5 Добавлено: 10.03.07 00:26
Можно примерчик как бы реализовать что было выше? А то я с vb2005 пока не сильно дружу :)

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 10.03.07 01:45
Как один из вариантов:

Public Class Form1


    Structure Man

        Sub New(ByVal Name As String, _
                ByVal Age As Int32)
            _name = Name
            _age = Age
        End Sub

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

        Private _age As Int32
        Public Property Age() As Int32
            Get
                Return _age
            End Get
            Set(ByVal Value As Int32)
                _age = Value
            End Set
        End Property

        Public Overrides Function ToString() As String
            Return String.Format("Имя: {0} Возраст: {1} лет", Me.Name, Me.Age)
        End Function

    End Structure



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


        Dim Tests As New List(Of Man)
        Tests.Add(New Man("Вася", 19))
        Tests.Add(New Man("Маша", 27))

        Dim _man As New Man("Настя", 25)
        Tests.Add(_man)

        Tests.RemoveAt(1)

        MessageBox.Show(Tests(1).ToString)

    End Sub

End Class

Ответить

Номер ответа: 7
Автор ответа:
 -=Fenix=-



Вопросов: 33
Ответов: 81
 Профиль | | #7 Добавлено: 10.03.07 20:57
А при такой структуре как изменять значения эелемента, т.е. как сейчас к примеру изменить age у Васи?

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 10.03.07 21:00
Tests(0).Age=25

Ответить

Номер ответа: 9
Автор ответа:
 -=Fenix=-



Вопросов: 33
Ответов: 81
 Профиль | | #9 Добавлено: 10.03.07 21:03
ха, пишет ошибку +)

Ответить

Номер ответа: 10
Автор ответа:
 -=Fenix=-



Вопросов: 33
Ответов: 81
 Профиль | | #10 Добавлено: 10.03.07 21:07
Я уже пробывал и так и сяк +)
Ошибка : Expression is value and therefore cannot be the target of an assignment.

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 10.03.07 21:08
        ;Dim myMan As Man = Tests(0)
        myMan.Age = 25

Ответить

Номер ответа: 12
Автор ответа:
 -=Fenix=-



Вопросов: 33
Ответов: 81
 Профиль | | #12 Добавлено: 10.03.07 21:11
но всёже это не изменяет значение в массиве Test(0).Age =(

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 10.03.07 21:14
Вообще.. все книги рекомендуют отказаться от использования структур из за особенностей их хранения в памяти..
Поэтому предпочтительнее вместо структуры использовать класс.. меньше хлопот будет..

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #14 Добавлено: 10.03.07 21:15
Конечно не изменит.. это же структура! Она не является ссылочным типом..
именно об этом я только что и говорил...

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 10.03.07 21:17
А если будешь юзать класс, то все будет именно так, как ты и предполагаешь..

Ответить

Страница: 1 | 2 | 3 |

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



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