Вопрос по массивам

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Вопрос по массивам

Сообщение AnarCky » 04.12.2006 (Пн) 18:55

Будьте добры, объясните новичку плззз.

Можно ли создать одномерный массив из объектов типа Label? :?:
И если да, то как махом изменить свойство Background Colour?

Заранее ба-альшое спасибо!
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.12.2006 (Пн) 19:00

Махом...

Перебором.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 04.12.2006 (Пн) 20:48

Это юмор, да?
Я сам люблю пошутить, но сейчас вопрос серьезный.
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.12.2006 (Пн) 20:57

GSerg писал(а):Перебором.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 04.12.2006 (Пн) 21:02

Слушай, я не понимаю.
Ты серьезно что-то под этим подразумеваешь? :?:

Если да, то будь добр - разъясни. Я же сказал, я почти чайник. :)

Если нет, то извиняйте... :roll:
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 04.12.2006 (Пн) 23:03

Код: Выделить всё
    Dim LBArray(9) As Label

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim L As Label
        For i As Integer = 0 To LBArray.Length - 1
            L = New Label
            L.Name = "MyLabel" & i + 1
            L.Text = L.Name
            L.BackColor = Drawing.Color.Azure
            L.Location = New Drawing.Point(10, 10 + i * (L.Size.Height + 2))
            LBArray(i) = L
        Next
        Me.Controls.AddRange(LBArray)
    End Sub
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 05.12.2006 (Вт) 11:43

ступил, сори :oops:
Последний раз редактировалось Ramzes 05.12.2006 (Вт) 14:32, всего редактировалось 1 раз.

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 05.12.2006 (Вт) 13:58

Понял.
Большое спасибо!
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 05.12.2006 (Вт) 15:14

Еще...

Что значат эти строки?

Nord777 писал(а):
Код: Выделить всё
       
LBArray(i) = L

Me.Controls.AddRange(LBArray)

Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 05.12.2006 (Вт) 15:24

LBArray(i) = L присвоение элементу масива с индексом i объекта L
Me.Controls.AddRange(LBArray) - в объект (судя по всему container или производный класс) добваляеться масив объектов неизвестного типа :roll:

Максим Рыльскый писал(а):Книги - морська глибина,
хто в них пірне аж до дна,
той хоч и труду мав досить,
дивнії перли виносить

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 05.12.2006 (Вт) 15:26

известного
Код: Выделить всё
Dim LBArray(9) As Label
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 05.12.2006 (Вт) 15:28

Спасибо.
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 05.12.2006 (Вт) 15:34

Nord777, внимательно читай
AnarCky писал(а):Еще...

Что значат эти строки?

Nord777 писал(а):
Код: Выделить всё
       
[b]LBArray(i) = L[/b]

Me.Controls.AddRange(LBArray)


Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 05.12.2006 (Вт) 15:39

я тебя понял :wink:
Точное обьяснение не вдаваясь в контекст темы
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 10.05.2007 (Чт) 3:46

Всем Здравствуйте.
А как можно взять в массив уже существующие на форме Label или Textbox, тем более, что все стоят в разных Location?
Удалена за ненадобностью.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.05.2007 (Чт) 7:10

Гм... Объявить массив и через For Each перебрать все контролы, проверять тип контрола и помещать в массив
Весь мир матрица, а мы в нем потоки байтов!

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

Сообщение 1Steps » 11.05.2007 (Пт) 3:05

Спасибо.
Удалена за ненадобностью.

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 11.05.2007 (Пт) 11:27

А как пишется правильно цикл For Each?
Скажите срочно плззз. Книжки под рукой нет, а надо узнать в течении получаса. HELP PLEASE!!!
Спасибо
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.05.2007 (Пт) 11:44

типа так

Код: Выделить всё
For Each obj In col
' что-то делаем с obj
Next


где obj - объект нужного тебе типа, а col - Коллекция, массив или что-то другое, реализующее интерфейс IEnumerable.
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 11.05.2007 (Пт) 11:51

Все вспомнил! проверьте

Код: Выделить всё
Dim i AS Control
Dim ARR() AS Control

For each i In ARR()*

If ARR(i) Is ChemElemCell.ChemElemCell

Ed If

Next


в месте помеченым * он подчеркивает скобочки и вопит "Number of indices is less than the number of dimensions of the indexed array"
Что это значит и как лечиться?
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 11.05.2007 (Пт) 11:54

!Viper!
Спаисбо!
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.05.2007 (Пт) 11:55

скобки убери

З.Ы. дал же тебе пример кода, прочитать не сумел?
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 11.05.2007 (Пт) 12:36

Код: Выделить всё
        For i1 = 1 To 10000
            For Each i In Controls
                If i Is ChemElemCell.ChemElemCell* Then
                    CRTBarray(i1) = i
                End If
            Next
        Next


Подчеркивает строчку ChemElemCell.ChemElemCell в этом коде. Пишет ChemElemCell это объект в пространстве имен ChemElemCell и не может быть использован как выражение :(
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.05.2007 (Пт) 13:48

Должно быть так:

Код: Выделить всё
If i.GetType Is GetType(ChemElemCell.ChemElemCell) Then
Весь мир матрица, а мы в нем потоки байтов!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.05.2007 (Пт) 15:10

А что, TypeOf ... Is в VB.net отменили?
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.05.2007 (Пт) 15:27

Не отменили, но походу народ про него забыл напрочь...
Весь мир матрица, а мы в нем потоки байтов!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.05.2007 (Пт) 15:30

tyomitch писал(а):А что, TypeOf ... Is в VB.net отменили?

Отменили.
Uprgade Wizard даёт по нему warning, преобразованный код не компилируется.

MSDN писал(а):В Visual Basic 6.0 функция TypeOf использовалась в инструкции If...Then...Else для того, чтобы установить, соответствовала ли ссылка на объект указанному типу объекта. В этом контексте определенный пользователем тип рассматривался как тип объекта.
В Visual Basic .NET определенные пользователем типы (теперь известные как структуры) не являются типами объектов и не могут обрабатываться функцией TypeOf.
Следующий пример иллюстрирует использование функции TypeOf с определенным пользователем типом:
Код: Выделить всё
' Visual Basic 6.0
Private Type MyType
   a As Integer
End Type
Private Sub Form_Load()
   Dim m As MyType
   If TypeOf m Is MyType Then
      MsgBox "MyType"
   End If
End Sub

' After upgrade to Visual Basic .NET
Private Structure MyType
   Dim a As Short
End Structure
Private Sub Form_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
   Dim m As MyType
   ' UPGRADE_WARNING: TypeOf has a new behavior.
   If TypeOf m Is MyType Then
      MsgBox "MyType"
   End If
End Sub

Что делать дальше
Приведите код к сравнению типов без использования функции TypeOf:
Код: Выделить всё
' Modified code
Dim m As MyType
Dim mTest As MyType
If m.GetType Is mTest.GetType Then...

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.05.2007 (Пт) 15:38

ндя... а в списке операторов TypeOf прекрасно себя чувствует без упоминаний об устаревании
Весь мир матрица, а мы в нем потоки байтов!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 12.05.2007 (Сб) 9:17

А почему ничего не происходит в таком коде:

Код: Выделить всё
    Dim cont As Control, i1 As Integer
    Dim stroka As String
    Dim fail As System.IO.StreamReader
    Dim CRTBarray() As ChemElemCell.ChemElemCell
    Dim el As ChemElemCell.ChemElemCell

        For i1 = 0 To Controls.Count - 1
            For Each cont In Controls
                If i1.GetType Is GetType(ChemElemCell.ChemElemCell) Then
                    CRTBarray(i1) = cont
                End If
            Next
        Next

        For i1 = 0 To CRTBarray.Length - 1

            If System.IO.File.Exists("Разное\table.txt") Then
                fail = System.IO.File.OpenText("Разное\table.txt")
                stroka = fail.ReadLine
            Else
                MessageBox.Show("К сожалению не найден файл table.txt.", "Ошибка", _
                              MessageBoxButtons.OK, MessageBoxIcon.Error, _
                              MessageBoxDefaultButton.Button1)
            End If

            el = New ChemElemCell.ChemElemCell
            el.Name = "cec" & stroka.Substring(0, 2)
            el.ElementName = stroka.Substring(54, 12)
            el.ElementLatinName = stroka.Substring(69, 12)
            el.ElementNumber = stroka.Substring(84, 3)
            el.ElementSymbol = stroka.Substring(0, 2)
            el.ElementNum1 = stroka.Substring(6, 9)
            el.ElementNum2 = stroka.Substring(18, 9)
            el.GradientColor1 = Color.OrangeRed
            el.GradientColor2 = Color.Orange
            el.Location = New Drawing.Point(24, 608 + el.Size.Width)
            CRTBarray(i1) = el

        Next


Хочется, чтобы порядка 110 контролов заполнились автоматически инфой из файла
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 12.05.2007 (Сб) 10:27

Вообще-то вот здесь должна быть ошибка, поскольку массив не инициализирован:
Код: Выделить всё
CRTBarray(i1) = cont


Во-вторых, непонятен смысл переобхявления элемента
Код: Выделить всё
el = New ChemElemCell.ChemElemCell


По идее, в этот момент элементы лежащие в массиве уже инициализированы (при условии, исправления предыдущей ошибки)
Весь мир матрица, а мы в нем потоки байтов!

След.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33

    TopList