Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > массив controls


Автор: IrinaProkopcova 9.6.2006, 10:58
Помогите, пожалуйста, не понимаю в чем ошибка.
Код

Public LText() As System.Windows.Forms.TextBox
Sub newFrm()
            Dim DLeika As New obchiy 'форма
            Dim count As Integer = 1
            For r As Int16 = 1 To 24   ' 24 ряда
                For k As Int16 = 1 To 9 ' девять колонок в ряд 
                    ReDim Preserve stext(count)
                   LText(count) = New System.Windows.Forms.TextBox' здесь ошибку выдает
                    LText(count).Name = "Ltext" & count
                    LText(count).BorderStyle = BorderStyle.Fixed3D
                    Select Case k
                        Case 2, 3, 5, 6, 8, 9
                            LText(count).Width = x
                        Case Else
                            LText(count).Width = xB
                    End Select
                    LText(count).Height = 20
                    Select Case k
                        Case 1
                            lokY = 80
                        Case 2
                            lokY = 180
                        Case 3
                            lokY = 236
                        Case 4
                            lokY = 292
                        Case 5
                            lokY = 392
                        Case 6
                            lokY = 448
                        Case 7
                            lokY = 504
                        Case 8
                            lokY = 604
                        Case 9
                            lokY = 660
                    End Select
                    LText(count).Location = New Point(lokY, 40 + k * 20)
                    LText(count).Visible = True
                    DLeika.tpVertUgol.Controls.Add(LText(count))
                Next
            Next

            LeikaData(strAllFile)
            DLeika.MdiParent = Me
            DLeika.Show()
            DLeika.Text = DLeika.Text & strNProt
End Sub
 

Автор: ivashkanet 9.6.2006, 11:11
IrinaProkopcova, какая ошибка?
Index out of range?
Все дело в том, что нумерация элементов идет с нуля smile 
И поэтому последний элемент count-1
Ты хочешь добавить эелемент в массив. За пределами его верхней границы. 
Тебе нужно либо redim ему сделать, типа как тут 
Цитата(IrinaProkopcova @  9.6.2006,  10:58 Найти цитируемый пост)
  ReDim Preserve stext(count)
 Либо использовать массив с запасом элементов.
P.S. Мы не телепаты, давай полностью описание ошибки. Если приводишь код, то убери, пожалуйста, все лишнее, не относящееся к вопросу. Твой код должен быть полностью автономен (если, конечно, хочешь чтобы мы его могли откомпилить и проверить), а не содержать неизвестно где объявленных переменных.
P.P.S. Это все для твоего же блага, просто так тебе быстрее ответят  smile 

 

Автор: IrinaProkopcova 9.6.2006, 11:56
Извиняюсь, просто думала ошибка, м.б., где-то раньше.
А вылетает здесь:
Код

        LText(count) = New System.Windows.Forms.TextBox

Текст Ошибки такой:
.
Цитата
An unhandled exeption has occurred in your application. If you click con......

Object reference not set to an instance of object.


А массив мне и нужен с единицы, потом из структуры давать значение удобней. "Нулевой" пусть себе болтается. 

Извиняюсь, еще раз, нашла ошибку. Действаительно Redimила не тот массив.
Спасибо! 

Автор: ivashkanet 9.6.2006, 13:03
Цитата(IrinaProkopcova @  9.6.2006,  11:56 Найти цитируемый пост)
Object reference not set to an instance of object.

Понятно. Сылка на объект не установлена. Т.е. LText "содержит" Nothing (в смысле ничего не содержит). Чтобы это исправить нужно его проинициализировать.
Либо так:
Код

LText = New System.Windows.Forms.TextBox

Либо в процессе описания:
Код

Public LText() As New System.Windows.Forms.TextBox
 

И будет тебе счастье  smile

Добавлено @ 13:06 
Как я посмотрю, ты сама нашла ответ.  Вот что значит прочитал только нужную мне часть (наименование ошибки) 

Автор: Exception 10.6.2006, 11:29
Вставлю свои пять копеек. Код жуткий.



Цитата(IrinaProkopcova @  9.6.2006,  11:58 Найти цитируемый пост)
Public LText() As System.Windows.Forms.TextBox


1) public-поле
2) Непонятный префикс



Цитата(IrinaProkopcova @  9.6.2006,  11:58 Найти цитируемый пост)
Dim DLeika As New obchiy 'форма


Цитата(IrinaProkopcova @  9.6.2006,  11:58 Найти цитируемый пост)
DLeika.tpVertUgol.Controls.Add(LText(count))


3) Принято называть вроде MainForm, SomeForm, а не транслитом


Цитата(IrinaProkopcova @  9.6.2006,  11:58 Найти цитируемый пост)
Select Case k
Case 2, 3, 5, 6, 8, 9
    LText(count).Width = x
Case Else
    LText(count).Width = xB
End Select


4) Непонятно откуда взявшиеся числа

5) Совершенно непонятно назначение x, xB. Ну зафиг такие имена давать?



Цитата(IrinaProkopcova @  9.6.2006,  11:58 Найти цитируемый пост)
LeikaData(strAllFile)


6) Имя метода должно отражать его суть в глагльной форме!



Цитата(IrinaProkopcova @  9.6.2006,  12:56 Найти цитируемый пост)
А массив мне и нужен с единицы, потом из структуры давать значение удобней. "Нулевой" пусть себе болтается. 


7) Ужасный стиль программирования. Как пусть болтается?








Что могу сказать? Возможно, покажусь грубым, но учись писать грамотный код! С таким стилем программирования ты сама не сможешь понять код, который писала год назад! Стыдно. 

Автор: IrinaProkopcova 13.6.2006, 08:35
Я самоучка и пишу всего-ничего, поэтому к Вам и обращаюсь за помощью. Спасибо за замечания, учту. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)