|
|
|
Supreme Being
      
участник
Last Login: 23.06.2008 8:38
Сообщ.: 91,
Visits: 451
|
|
| Есть у меня функция private function GetValue(i) as String мне нужно чтобы возвращаемым значением была переменная, которую я туда присваиваю, а не значение этой переменной. как можно сделать?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 26.10.2007 9:10
Сообщ.: 166,
Visits: 1 538
|
|
| А ты прочитай значение своей переменной после вызова функции. И если в теле функции есть инструкции, присваивающие этой переменной соответствующее значение, то будешь приятно удивлён. В противном случае выложи свой код. Желаю успехов.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.06.2008 8:38
Сообщ.: 91,
Visits: 451
|
|
| В-общем указателей в VB нет. Я этого не знал. Короче задача такая: есть переменная, созданная на основе собственного типа данных, который достаточно сложен и разветвлен. Есть функция, которая на выходе выдает кусок этой переменной. Мне нужно: получить доступ к этому куску и изменить в нем некоторые значения. В VB указатели используются исключительно при передаче переменных в функции и процедуры с помощью служебного слова ByRef. Функция всегда возвращает не ссылку на переменную, а ее копию. В-общем буду что-нибудь кривое делать. Мыслишки кое-какие есть.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 26.10.2007 9:10
Сообщ.: 166,
Visits: 1 538
|
|
| Суть в общем понятна, но есть много вопросов по деталям. Выложи код (хотя бы ключевые фрагменты). Где и как описана переменная? Откуда и как вызывается функция? что она делает с переменной? Как должен использоваться результат её работы?
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.06.2008 8:38
Сообщ.: 91,
Visits: 451
|
|
| Вот код - смотрите Private Type CharacterType id As Long ChName As String End Type Private Type MyType id As String ArOfCharacters() As CharacterType End Type Dim MyVar() As MyType 'Возвращает кусок глобальной переменной Private Function GetCharacter(id, ChId) As CharacterType GetCharacter.ChName = "BLANK" For i = LBound(MyVar) To UBound(MyVar) If MyVar(i).id = id Then For j = LBound(MyVar(i).ArOfCharacters) To UBound(MyVar(i).ArOfCharacters) If MyVar(i).ArOfCharacters(j).id = ChId Then GetCharacter = MyVar(i).ArOfCharacters(j) Exit Function End If Exit Function Next j End If Next i End Function 'Процедура замены атрибута ChName у заданного элемента глобальной переменной Private Function RenameElement(id, ChId, NewName) As Boolean RenameElement = False With GetCharacter(id, ChId) 'Функция возвращает копию куска глобальной переменной, а ну жна ссылка на него If .ChName <> "BLANK" Then .ChName = NewName 'Изменяю атрибут у копии куска глобальной переменной, а не у нее самой End If End With End Function
|
|
|
|
|
Supreme Being
      
участник
Last Login: 26.10.2007 9:10
Сообщ.: 166,
Visits: 1 538
|
|
| В приведенном коде не хватает процедуры, из которой вызываются твои функции. А это место и представляет наибольший интерес. Если это не очень тебя затруднит...
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.06.2008 8:38
Сообщ.: 91,
Visits: 451
|
|
| Пожалуйста - вот обработчик кнопочки "Ок": Private Sub OkButton_Click() 'Изменяем значение выбранного элемента в списке CharactersListBox CharactersListBox.List(CharactersListBox.ListIndex) = RenameCharacterTextBox.Text 'Отображаем эти изменения в структуре данных Flazhok = RenameElement(ItemsListBox.ListIndex, CharactersListBox.ListIndex, RenameCharacterTextBox.Text) End Sub Вопросы типа - почему и зачем так сделано будут излишни. Я просто смоделировал подобную ситуацию. На мой код форума не хватит и никто в нем разбираться не будет. Небольшое пояснение: структура данных содержит информацию об индексах и значениях списков ItemListBox и CharactersListBox. По кнопке "Ок" в список CharactersListBox в выделенный элемент списка заносится значение из RenameCharacterTextBox и это изменение вносится в структуру данных.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 26.10.2007 9:10
Сообщ.: 166,
Visits: 1 538
|
|
До обеда написал тебе довольно много чего критического, но сообщение пропало. Повторяться не буду. Посмотри на мой код и подумай: не хочешь ли ты получить что-то похожее. Обрати внимание, что для доступа к чати сложной переменной я не использую функции. Честно говоря, я даже не представляю, как их можно было бы здесь использовать. Если твоя задача не похожа на мой пример, то укажи чем именно. По твоему коду я ничегошеньки не понял, кроме одного - он неоправдано сложен и запутан. Type MyType L As Long S As String End Type Type MyComplexType L As Long A(1 To 8) As MyType End Type Dim MySuperArray(1 To 5) As MyComplexType Sub Main() Dim i As Integer, j As Integer For i = 1 To 5 MySuperArray(i).L = i For j = 1 To 8 MySuperArray(i).A(j).L = j MySuperArray(i).A(j).S = "Значение элемента №" & j Next j Next i MsgBox MySuperArray(3).L MsgBox MySuperArray(3).A(7).L MsgBox MySuperArray(3).A(7).S MySuperArray(3).A(7).S = "Изменённое значение элемента №7" MsgBox MySuperArray(3).A(7).S End Sub
|
|
|
| | |