Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49

Цикл не срабатывает второй раз

18.10.2017, 17:56. Показов 1914. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Ребята помогите.
Использую такой цикл:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
Dim i1 As Integer = 0
Dim d As Integer
               Try
            For Krasn = 1 To DataGridView1.RowCount.ToString - 0
                 If dt.Rows(i1).Item(6) = "1" Then
 
                     Dim pan As New Panel With {.Top = d, .Left = 1, .Size = New Size(296, 59), .BackColor = Color.Gray,
                .BorderStyle = BorderStyle.None, .TabStop = False, .Location = New Point(0, 0 + d)}
                   
                 Dim lab1 As New Label With {.Name = i1, .Text = dt.Rows(i1).Item(1), .Size = New Size(291, 13), .Visible = True,
                .Top = d, .Left = 1, .BackColor = Color.Red, .Location = New Point(3, 2 + d), .ForeColor = Color.Black}
                    
                 Dim TXT As New TextBox With {.Text = dt.Rows(i1).Item(0), .Size = New Size(293, 40), .Visible = True,
                .Top = d, .Left = 1, .BackColor = Color.Tomato, .Multiline = True, .BorderStyle = BorderStyle.FixedSingle,
                .Location = New Point(2, 17 + d), .ContextMenuStrip = FZad.ContextMenuStrip1, .ReadOnly = True}
                    
                    AddHandler lab1.Click, AddressOf FZad.lab1_Click
                    AddHandler TXT.Click, AddressOf FZad.TXT_Click
                   
                     d = d + 61
                  
                    FZad.Controls.Add(pan)
                    FZad.Controls.Add(lab1)
                    FZad.Controls.Add(TXT)
                 
                   End If
                
                   i1 = i1 + 1
 
            Next
Когда я стараюсь запустить его второй раз пишет что в последней позиции строка отсутствует.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2017, 17:56
Ответы с готовыми решениями:

Отображение прогресса скачивания файла не срабатывает во второй раз
Здравствуйте, подскажите почему может не работать прогресс бар? Один раз сработал и всё...(Visual basic 2010) Public Class Form1 ...

Не срабатывает скрипт второй раз
Ребята помогите. Есть скрипт: jQuery(document).ready(function(){ jQuery(".world li").click( function(){ ...

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

20
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
18.10.2017, 20:09
вот это недоразумение
VB.NET
1
For Krasn = 1 To DataGridView1.RowCount.ToString - 0
замените для начала на
VB.NET
1
For Krasn = 0 To DataGridView1.RowCount-1
Начальное значение цикла должно быть не более чем RowCount -1, и количество элементов Rows в гриде должно быть не менее 1.
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
18.10.2017, 20:39
Цитата Сообщение от Winney Посмотреть сообщение
Начальное значение цикла должно быть не более чем RowCount -1
С какого это перепугу ?
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
18.10.2017, 21:01
Цитата Сообщение от SoftIce Посмотреть сообщение
С какого это перепугу ?
я полагаю, будет точно такая же ошибка, или аналогичная, так как будет попытка обращения к несуществующему элементу коллекции
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
18.10.2017, 21:08
Цитата Сообщение от Winney Посмотреть сообщение
будет попытка обращения к несуществующему элементу коллекции
Вся прелесть в том, что счётчик цикла Krasn в теле нигде не используется почему-то, но зато зачем то есть i1=i1+1, без всяких условий.
И DataGridView1 тоже нигде не упоминается. Хотя возможно, что DataGridView1 и dt - это одно и то же, тогда Вы правы.
1
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
18.10.2017, 21:12
Цитата Сообщение от SoftIce Посмотреть сообщение
Вся прелесть в том, что счётчик цикла Krasn в теле нигде не используется почему-то, но зато зачем то есть i1=i1+1, без всяких условий.
И DataGridView1 тоже нигде не упоминается. Хотя возможно, что DataGridView1 и dt - это одно и то же, тогда Вы правы.
вероятно. я не читал код дальше первой на мой взгляд глупости.

А автору топика лучше бы в таком случае привести код процедуры полностью. Чтобы избежать кривизны мысли)))
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
18.10.2017, 21:13
В данном г.коде не важно с какого значения начинается цикл и каким заканчивается, важно количество итераций.
Короче, сделано через одно место.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
18.10.2017, 21:14
Цитата Сообщение от alle380 Посмотреть сообщение
FZad.lab1_Click
Ну собственно после FZad все понятно)


Добавлено через 1 минуту
Цитата Сообщение от SoftIce Посмотреть сообщение
в данном г.коде
Цитата Сообщение от SoftIce Посмотреть сообщение
Короче, сделано через одно место.
Поддерживаю вас в этом, коллега)
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49
19.10.2017, 17:54  [ТС]
Спасибо за беседу!)))
Согласен сделано через ее.
Я только пол года пробую понять что то в VB.Net, знаний не хватает, почему к Вам и обратился.
0
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,591
Записей в блоге: 1
19.10.2017, 18:02
Цитата Сообщение от Winney Посмотреть сообщение
FZad
а это была-то, форма заданий
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49
19.10.2017, 18:19  [ТС]
Winney
VB.NET
1
For Krasn = 0 To DataGridView1.RowCount-1
данная штука не работает.
Я загружаю данные из Access в DataGridView1, потом из нее пытаюсь загрузить данные в форму при помощи новых контролов, при чем мне нужно что бы цикл загрузил контролы сначала с приоритетом(цифрой) 1 потом 2 и потом 3.
По сути хочу получить записнушку с напоминалкой.
Глянте мою писанину, подскажите что не так.
При добавлении нового события происходит ошибка, при загрузке проги все ОК.
Вложения
Тип файла: rar Прога НАП.rar (637.2 Кб, 7 просмотров)
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49
19.10.2017, 18:21  [ТС]
Заданий. Сократил.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
19.10.2017, 21:16
Я смогу только завтра по мск глянуть на ваш Zad))))))
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49
20.10.2017, 07:26  [ТС]
Ок. Устроит. Мне главное результат.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
26.10.2017, 22:38
Лучший ответ Сообщение было отмечено alle380 как решение

Решение

Приношу извинения за долгое ожидание. ОРЗ никого не щадит!)))
Насколько я разобрался в вашем коде, задача не такая сложная вроде бы оказалась. В будущем используйте точки останова, чтобы выявить жучка (bug).

Итак, предлагаю вам в модуле 1 изменить в процедуре ZAP ваш код на следующий:

VB.NET
1
2
3
4
            For Krasn = 0 To dt.Rows.Count - 1
                'Сначала добавляем напоминалки с приоритетом 1
                If i1 > Krasn Then Exit For
                If dt.Rows(i1).Item(6) = "1" Then
VB.NET
1
2
3
            For Zelen = 0 To dt.Rows.Count - 1
                If i2 > Zelen Then Exit For
                If dt.Rows(i2).Item(6) = "2" Then
VB.NET
1
2
3
            For Sgelt = 0 To dt.Rows.Count - 1
                If i3 > Sgelt Then Exit For
                If dt.Rows(i3).Item(6) = "3" Then
причина:
внимательно работайте с объектами, особенно с массивами - коим и является Rows. Перед тем как обратится к элементу массива, убедитесь, что его индекс доступен, например
VB.NET
1
 If i2 > Zelen Then Exit For
и аналогично для других

Не по теме:

в целом код крайне замусорен, есть над чем поработать)



Добавлено через 1 минуту
З.Ы. Так и не понял, как получить список напоминаний)))
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49
29.10.2017, 20:26  [ТС]
Winney спасибо за потраченное время, но не помогло. При запуске проги мой чудо код срабатывает и под панелью вываливаются поочередно текстбоксы с напоминаниями. Но при добавлении нового текста возникает ошибка, причем в лейбле (он считает количество новых текстбоксов) около кнопки добавить все срабатывает и прибавляется на один больше. Когда прогу открываешь заново то все нормально, все новые контролы появляются.
Когда я добавляю
VB.NET
1
If i2 > Zelen Then Exit For
то новые контролы вообще не появляются.
Также попробовал Вашу подсказку.
VB.NET
1
For Sgelt = 0 To dt.Rows.Count - 1
. Программа отработала точно так же как у меня было.
Может будут какие то еще предложения?
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
29.10.2017, 21:05
Да. Блок-схему нарисуйте и в студию. То бишь картинку давайте. Посмотрим.
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49
30.10.2017, 15:14  [ТС]
Ок. Сделаю скрины.
0
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
31.10.2017, 15:03
alle380, а разве не стоит обращаться к элементу последовательности в цикле, а не к i1?
Я чуток изменил код и задания добавляются
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
'Загружаем напоминания в форму
    'Загружаем напоминания в форму
    Public Sub ZAP()
        'Количество шагов в низ новых Панели, Лейблов, Текстбоксов
        Dim d As Integer
        'Запускаем поочередно напоминалки, Переменная i1 создана в модуле
        'Переменная строки
        Try
            For Krasn = 0 To FZad.DataGridView1.RowCount - 1
                'Сначала добавляем напоминалки с приоритетом 1
                If dt.Rows(Krasn).Item(6) = "1" Then
                    'Создаем панели в цикле
                    Dim pan As New Panel With {.Top = d, .Left = 1, .Size = New Size(296, 69), .BackColor = Color.Gray,
                .BorderStyle = BorderStyle.None, .TabStop = False, .Location = New Point(0, 0 + d)}
                    'Создаем лейблы в цикле
                    Dim lab1 As New Label With {.Name = Krasn, .Text = dt.Rows(Krasn).Item(1), .Size = New Size(291, 13), .Visible = True,
                .Top = d, .Left = 1, .BackColor = Color.Red, .Location = New Point(3, 2 + d), .ForeColor = Color.Black}
                    Dim TXT As New TextBox With {.Text = dt.Rows(Krasn).Item(0), .Size = New Size(293, 50), .Visible = True,
                .Top = d, .Left = 1, .BackColor = Color.Tomato, .Multiline = True, .BorderStyle = BorderStyle.FixedSingle,
                .Location = New Point(2, 17 + d), .ContextMenuStrip = FZad.ContextMenuStrip1, .ReadOnly = True,
                .Font = New Font("Book Antiqua", 10)}
                    'Задаем данные клика нового лейбла  
                    AddHandler lab1.Click, AddressOf FZad.lab1_Click
                    AddHandler TXT.Click, AddressOf FZad.TXT_Click
                    'Задаем размер шага в низ 
                    d = d + 71
                    ' Загружаем на форму
                    FZad.Controls.Add(pan)
                    FZad.Controls.Add(lab1)
                    FZad.Controls.Add(TXT)
                    'Выводим лейблы на передний план
                    lab1.BringToFront()
                    TXT.BringToFront()
                End If
                'i1 = i1 + 1
 
            Next
            For Zelen = 0 To FZad.DataGridView1.RowCount - 1
                If dt.Rows(Zelen).Item(6) = "2" Then
                    'Создаем панели в цикле
                    Dim pan As New Panel With {.Top = d, .Left = 1, .Size = New Size(296, 69), .BackColor = Color.Gray,
                .BorderStyle = BorderStyle.None, .TabStop = False, .Location = New Point(0, 0 + d)}
                    'Создаем лейблы в цикле
                    Dim lab1 As New Label With {.Text = dt.Rows(Zelen).Item(1), .Size = New Size(292, 13), .Visible = True,
                .Top = d, .Left = 1, .BackColor = Color.Green, .Location = New Point(2, 2 + d)}
                    Dim TXT As New TextBox With {.Text = dt.Rows(Zelen).Item(0), .Size = New Size(294, 50), .Visible = True,
                .Top = d, .Left = 1, .BackColor = Color.Silver, .Multiline = True, .BorderStyle = BorderStyle.FixedSingle,
                .Location = New Point(1, 17 + d), .ContextMenuStrip = FZad.ContextMenuStrip1, .ReadOnly = True,
                .Font = New Font("Book Antiqua", 10)}
                    'Задаем данные клика нового лейбла
                    AddHandler lab1.Click, AddressOf FZad.lab1_Click
                    AddHandler TXT.Click, AddressOf FZad.lab1_Click
                    'Задаем размер шага в низ 
                    d = d + 71
                    ' Загружаем на форму
                    FZad.Controls.Add(pan)
                    FZad.Controls.Add(lab1)
                    FZad.Controls.Add(TXT)
                    'Выводим лейблы на передний план
                    lab1.BringToFront()
                    TXT.BringToFront()
                End If
                'i2 = i2 + 1
 
            Next
            'В конце добавляем напоминалки с приоритетом 3
            For Sgelt = 0 To FZad.DataGridView1.RowCount - 1
                If dt.Rows(Sgelt).Item(6) = "3" Then
                    'Создаем панели в цикле
                    Dim pan As New Panel With {.Top = d, .Left = 1, .Size = New Size(296, 69), .BackColor = Color.Gray,
                .BorderStyle = BorderStyle.None, .TabStop = False, .Location = New Point(0, 0 + d)}
                    'Создаем лейблы в цикле
                    Dim lab1 As New Label With {.Text = dt.Rows(Sgelt).Item(1), .Size = New Size(292, 13), .Visible = True,
                .Top = d, .Left = 1, .BackColor = Color.Yellow, .Location = New Point(2, 2 + d)}
                    Dim TXT As New TextBox With {.Text = dt.Rows(Sgelt).Item(0), .Size = New Size(294, 50), .Visible = True,
                .Top = d, .Left = 1, .BackColor = Color.Silver, .Multiline = True, .BorderStyle = BorderStyle.FixedSingle,
                .Location = New Point(1, 17 + d), .ContextMenuStrip = FZad.ContextMenuStrip1, .ReadOnly = True,
                .Font = New Font("Book Antiqua", 10)}
                    'Задаем данные клика нового лейбла
                    AddHandler lab1.Click, AddressOf FZad.lab1_Click
                    AddHandler TXT.Click, AddressOf FZad.lab1_Click
                    'Задаем размер шага в низ 
                    d = d + 71
                    ' Загружаем на форму
                    FZad.Controls.Add(pan)
                    FZad.Controls.Add(lab1)
                    FZad.Controls.Add(TXT)
                    'Выводим лейблы на передний план
                    lab1.BringToFront()
                    TXT.BringToFront()
                End If
                'i3 = i3 + 1
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
 
    End Sub
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49
01.11.2017, 18:51  [ТС]
Всем спасибо за помощь, но проблема не решилась. Обрисую проблему скринами.
1. При загрузке у меня все работает (См. скрин №1).
2. Когда сохраняю выдает ошибку (См. скрин №2).
3. Еще заметил что после сохранения и ошибки не дает открыть путь у Access. Выдает след. ошибку (См. скрин №3).

По поводу последней подсказки:
1. Меняю Переменную i1 на Zelen
VB.NET
1
If dt.Rows(Zelen).Item(6) = "2" Then
Отображается последние 2 контрола и также выходит ошибка (См. скрин №4)
2. Если я убираю
VB.NET
1
i3 = i3 + 1
тогда все контролы выходят с текстом первой строки в базе и их количество соответствует количеству строк в базе.(См. скрин №5)
Миниатюры
Цикл не срабатывает второй раз   Цикл не срабатывает второй раз   Цикл не срабатывает второй раз  

Цикл не срабатывает второй раз   Цикл не срабатывает второй раз  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2017, 18:51
Помогаю со студенческими работами здесь

Кнопка не срабатывает второй раз
Доброе утро!подскажите, пожалуйста. Почему при повторном нажатии кнопка не срабатывает? $(document).ready (function () { ...

Прерывание не срабатывает второй раз.
Добрый день, Прошу помощи. Я изучаю прерывания. Использую Avr studyo 4.19. Работаю через JTAG с Pinboard 2 rev 2. Код ниже: .ymstude...

Pause каждый второй раз срабатывает
Здравствуйте. Сегодня включил ПК, запустил *.bat и почувствовал неладное. 15 минут тестов выявили проблему: pause срабатывает каждый второй...

Почему While не срабатывает второй раз и массив не заполняется?
Добрый вечер. Почему While не срабатывает второй раз и массив не заполняется? Но если закоментить первый While то второй начинает...

Цикл срабатывает по нескольку раз
Добрый вечер! Возникла следующая проблема: по некой причине в следующей программе цикл while после проверки условия два раза выполняет тело...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru