Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Mad_Marine
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 115

Переменные не видны, если объявлены в блоке If - Then

06.06.2012, 01:15. Показов 2340. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Проблема вот в чём. VB.NET выдаёт ошибку "Lines_Выбранный_Знак" не объявлен. Хотя я его объявлял в блоке If Then.
Я его могу конечно объявить вне блока, но тогда будет работать только один вариант кода. Просто блоков If Then у меня 12 шт будет, и участок кода "Жирный не жирный" где много текста, мне надо будет в каждый из 12 блоков запихивать. Это не удобно.

Есть идеи как объявить переменную по триггер?


VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
'''
''Наверху такие же блоки от 1 до 11
''
 
'12 Блок
If bytНомерЗнака = 12 Then
            Dim path_Выбранный_Знак As String = Application.StartupPath & "\Resources\Text\Zaraev\(12)Рыбы.txt"
            Dim Lines_Выбранный_Знак() As String = IO.File.ReadAllLines(path_Выбранный_Знак, System.Text.Encoding.Default)
        End If
 
 
 
        'Жирный и нежирный
        strMassFontBold = Microsoft.VisualBasic.Mid(Lines_Выбранный_Знак(bytNumber), 5, 1)
 
        'И тут ещё очень много текста
        '
        '
 
    End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2012, 01:15
Ответы с готовыми решениями:

не видны переменные и объекты которые глобально объявлены в классе
Здравствуйте. У меня следующая проблема: Делал прогу месяц назад, но по причине отъезда ее забросил. Сейчас на другом компе...

Не видны переменные, объявленные в блоке Try/Catch
try{ int i = 0; } i++; Ошибка Как исправить, заставить увидеть переменную?

Если вызываешь в потоке метод, все его переменные локальны и не видны другим потокам в которых тот же метод вызван?
У меня похожая проблема, не пойму про потоки. Если вызываешь в потоке метод, все его переменные локальны и не видны другим потокам в...

10
 Аватар для kOS_77
196 / 188 / 9
Регистрация: 14.06.2011
Сообщений: 495
06.06.2012, 01:38
Логично.
VB.NET
1
2
3
4
If bytНомерЗнака = 12 Then
            Dim path_Выбранный_Знак As String = Application.StartupPath & "\Resources\Text\Zaraev\(12)Рыбы.txt"
            Dim Lines_Выбранный_Знак() As String = IO.File.ReadAllLines(path_Выбранный_Знак, System.Text.Encoding.Default)
        End If
Блок If работает только тогда, когда выполняется условие, а если условие не выполняется то все что в этом блоке игнорируется.

Этот код выполняется в любом случае.
strMassFontBold = Microsoft.VisualBasic.Mid(Lines_Выбранны й_Знак(bytNumber), 5, 1)
Поэтому VB и ругается, зная заранее что If она может и не выполнять а вот "strMassFontBold" - придется вместе с той переменной которая объявлена в блоке If...

Добавлено через 6 минут
If можно использовать по другому.

VB.NET
1
2
3
4
5
6
If "условие" Then ...
else if ... Then ...
else if ... Then ...
else if ... Then ...
else if ... Then ...
End if
Это так, для справки, хотя уверен что знаете про это.

А что выполняет ваша программа, может помогу с кодом...
0
 Аватар для Mad_Marine
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 115
06.06.2012, 02:08  [ТС]
Программу почти закончил. Она короче говоря, будет висеть в трее и вместо иконки в трее будут две цифры [01; 02; 03;... 31] типо дата сегодняшняя. Рядом с файлом программы Zaraev.exe Будет папка с ресурсами под названием "Resources" там будут файлы блокнота с данными. Там будут
файлы с названиями

...
(11)Водолей.txt
(12)Рыбы.txt

И записываются данные в блокнот вручную, вот так.

Рыбы Июнь 'Первая строчка блокнота
01 0 'Вторая строчка блокнота
02 +2 'Третья строчка блокнота
03 0
04 -1
05 0
06 +1
07 0
08 -2
09 0
10 +2
11 0
12 -1
13 0
14 0
15 +1
16 0
17 0
18 0
19 -2
20 0
21 +2
22 0
23 -1
24 0
25 0
26 -1
27 0
28 -2
29 0
30 +2
31 ---

В итоге в трее будет висеть число определенного цвета и шрифта.
Если день обычный, то будет черный цвет например "05"
Если день благоприятный, то будет зеленый цвет "06"
Если день удачный, то зеленый и жирный шрифт "10"
Если неблагоприятный то "12"
Если опасный то 19

В общем программа почти дописана. Завтык вот в чём.
Я сделал так что программа читает по адресу блокнот в котором написано в одной строке слово "Рыбы". Как мне после этого заставить программу читать путь?

Если Lines_Выбранный_Знак() = то что прочитала программа из блокнота в котором написано "Рыбы".

'Жирный и нежирный
strMassFontBold = Microsoft.VisualBasic.Mid(Lines_Выбранны й_Знак(bytNumber), 5, 1)

А в моём примере у меня это было осуществлено через переменную bytНомерЗнака.

Потом через контекстное меню, из иконки в трее, будет отображаться список из знаков зодиака, при нажатии на конкретный знак, программа будет записывать в блокнот соответствующий знак, в моем примере программа считала с блокнота слово "Рыбы" и должна начать работать с этим знаком.
Но из-за блока If Then программа дальше не идёт.
Я её сам за 4 дня написал на 95 %. Она работает. Вот только возникла небольшая проблема.
0
 Аватар для kOS_77
196 / 188 / 9
Регистрация: 14.06.2011
Сообщений: 495
06.06.2012, 03:12
там будут файлы блокнота с данными. Там будут
файлы с названиями

...
(11)Водолей.txt
(12)Рыбы.txt

И записываются данные в блокнот вручную, вот так.
Я правильно понимаю - весь гороскоп расписан в файле и меняться ничего не будет, а нам нужно только исходя из выбранного знака залезть в нужный .txt и взять число со строчки которая соответствует дню месяца ?

т.е.

благоприятный день = Знак зодиака (рыбы) + Календарный день месяца.

Я правильно понял ?
0
 Аватар для Mad_Marine
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 115
06.06.2012, 03:17  [ТС]
Можно сделать так, но как я и говорил это будет очень неудобно.

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
If bytНомерЗнака = 11 Then
            Dim path_Выбранный_Знак As String = Application.StartupPath & "\Resources\Text\Zaraev\(11)Водолей.txt"
            Dim Lines_Выбранный_Знак() As String = IO.File.ReadAllLines(path_Выбранный_Знак, System.Text.Encoding.Default)
 
            'Жирный и нежирный
            strMassFontBold = Microsoft.VisualBasic.Mid(Lines_Выбранный_Знак(bytNumber), 5, 1)
 
            'И тут ещё очень много текста
            '
            '
        End If
      
 
 
 
        If bytНомерЗнака = 12 Then
            Dim path_Выбранный_Знак As String = Application.StartupPath & "\Resources\Text\Zaraev\(12)Рыбы.txt"
            Dim Lines_Выбранный_Знак() As String = IO.File.ReadAllLines(path_Выбранный_Знак, System.Text.Encoding.Default)
 
            'Жирный и нежирный
            strMassFontBold = Microsoft.VisualBasic.Mid(Lines_Выбранный_Знак(bytNumber), 5, 1)
 
            'И тут ещё очень много текста
            '
            '
        End If
Добавлено через 3 минуты
Цитата Сообщение от kOS_77 Посмотреть сообщение
Я правильно понимаю - весь гороскоп расписан в файле и меняться ничего не будет, а нам нужно только исходя из выбранного знака залезть в нужный .txt и взять число со строчки которая соответствует дню месяца ?

т.е.

благоприятный день = Знак зодиака (рыбы) + Календарный день месяца.

Я правильно понял ?
Да ты правильно понял. У меня работает только один знак, а я хочу добавить в папку \Resources\Text\Zaraev
Файлы
(01)Овен.txt
(02)Телец.txt
...
И их потом каждый месяц заполнять вручную в блокноте надо будет. А программа будет только их читать. И записывать программа будет только последний выбранный знак, чтобы запустить программу выбрать свой знак, например стрелец, и потом закрыть, потом еще раз запустить и программа будет читать уже только стрельца.
0
 Аватар для kOS_77
196 / 188 / 9
Регистрация: 14.06.2011
Сообщений: 495
06.06.2012, 03:33
И их потом каждый месяц заполнять вручную в блокноте надо будет
А откуда их брать(цифры благоприятные) каждый месяц ?
0
 Аватар для Mad_Marine
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 115
06.06.2012, 03:34  [ТС]
В строчке будет не только число, но и цвет текста и жирность шрифта.
То есть читаем шестую строчку
"06 +1"
День недели сегодня шестой, значит читать будем шестую сточку
четвёртый и пятый символы.
Четвёртый отвечает за цвет
Пятый за толщину шрифта.

У меня всё работает, мне просто для каждого блока нужно много текста загонять в блоки If Then, а их будет 12 шт на каждый из знаков зодиака. =(
Вот я и думаю как объявить переменную если не через блок If то как нибудь по другому.
0
 Аватар для kOS_77
196 / 188 / 9
Регистрация: 14.06.2011
Сообщений: 495
06.06.2012, 03:36
Вот и я хочу понять алгоритм данных что бы их в цикл запихнуть
0
 Аватар для Mad_Marine
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 115
06.06.2012, 03:37  [ТС]
Цитата Сообщение от kOS_77 Посмотреть сообщение
А откуда их брать ?
У меня на двери висит календарь на год Зараева, там всё и написано. Мы с мамой на этой теме уже 12 лет так сидим, и вроде всё сбывается. Мы не особо верим в это, просто нам это интересно. Вот я и решил это реализовать, чтобы возле часов в трее было видно какой у меня день.
Короче от балды цифры загоняются а не по формуле. Вот я это и реализовал, только в последнем шаге, очень много текста получится и будет не удобно это в отдельный блок If загонять.
0
 Аватар для kOS_77
196 / 188 / 9
Регистрация: 14.06.2011
Сообщений: 495
06.06.2012, 03:54
Утром голова посвежее будет)))) там сообразим. Можно для прикола конкурс объявить на самый короткий код))).
0
 Аватар для Mad_Marine
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 115
06.06.2012, 19:29  [ТС]
В процессе разбора, у меня возник вопрос вопрос: как программно записать переменную в модуль?
Чтобы потом из модуля можно было эту переменную использовать во всем проекте.

Добавлено через 12 часов 29 минут
В общем разобрался в чём было дело. Щас сам отвечу на свой вопрос.

Добавлено через 5 минут
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
Public Class frmMain
 
Dim path_Выбранный_Знак As String
Dim Lines_Выбранный_Знак() As String
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
If bytНомерЗнака = 12 Then
            path_Выбранный_Знак = Application.StartupPath & "\Resources\Text\Zaraev\(12)Рыбы.txt"
            Lines_Выбранный_Знак = IO.File.ReadAllLines(path_Выбранный_Знак, System.Text.Encoding.Default)
        End If
 
 
        'Жирный и нежирный
        strMassFontBold = Microsoft.VisualBasic.Mid(Lines_Выбранный_Знак(bytNumber), 5, 1)
 
        'И тут ещё очень много текста
        '
        '
 
End Sub
 
 
End Class
Добавлено через 6 минут
Просто я и раньше объявлял глобальные переменные в классе.

Dim path_Выбранный_Знак As String

А потом я в кнопках снова их объявлял через Dim, и естественно значение этих переменных было соответствующем только внутри этой кнопки. А уже в другой кнопке, переменные брали значения из глобальных.

Нужно было один раз объявить их в классе, а потом просто в кнопках уже не объявлять их а просто присваивать им значения которые необходимы.
В общем я привёл правильны код, сами смотрите.
PS я дописывал программу глубокой ночью, соответственно мозг не очень работал.
Ну как бы тему "Переменные не объявляются" можно закрывать. Ответ я опубликовал.
:cofee:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.06.2012, 19:29
Помогаю со студенческими работами здесь

После прохода всех исключений компилятор пишет что переменные не объявлены
Пишу на С# но соль не в этом static void Uravn() { string a,b,c; int flag=0; double d,sqrtd; double...

Не видны переменные в другом условии
Добрый день. Может глупый вопрос, но не могу понять как решить проблему: if(isset($_POST)) { //получаем месяц из POST'a ...

Возвращение нескольких значений из ф-ции, если они объявлены в ней
Ситуация: Нужно в итоге вывести 10 массивов из ф-ции и получить их в Main. Но, проблема в том, что объявляются они в ней же. И...

Не видны переменные из подключаемого файла в классе
День добрый такая у меня проблема возникла, есть класс для простенькой защиты по ip. работает впринципе неплохо, толко не принимает...

Иногда переменные, созданные в main, не видны в цикле for
#include <iostream> #include <vector> #include <functional> using namespace std; int main() { const int max(20); int...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru