Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/23: Рейтинг темы: голосов - 23, средняя оценка - 4.78
abbat81
29 / 29 / 2
Регистрация: 20.07.2011
Сообщений: 390
1

Задать область видимости переменной для всех форм

28.07.2011, 01:10. Просмотров 4208. Ответов 32
Метки нет (Все метки)

Как заставить проделывать работу без отображения формы.

Например есть button1 на form1
нажимаем на кнопку, переходим к другому коду. (он сейчас на form2) и как в этом случае еще перенести переменные на form2?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2011, 01:10
Ответы с готовыми решениями:

Область видимости переменной
Значения переменных dtBegin и dtEnd во втором CASE не видны. Почему, ведь все...

Одна переменная для всех форм
Есть число, в одной форме показвается его значение, в других (их много) можно...

Если создать объект Graphics в модуле или в форме, то картинка прорисовывается не на всю область видимости
Здравствуйте, если создать объект Graphics в модуле или в форме, то картинка...

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

Задать значение переменной из другого потока
Imports System.Threading Public Class Form1 Dim th As New...

32
kOS_77
193 / 185 / 9
Регистрация: 14.06.2011
Сообщений: 495
28.07.2011, 01:33 2
А что значит переходим к другому коду ?

Мы нажимаем на кнопку, т.е. возникает событие "Нажатие кнопки" и вот в этом событии мы пишем то что нужно выполнить после нажатии кнопки. К примеру скрыть Form1 можно командой Me.Hide - Me потому что обращаться из формы 1 к ней же командой Form1 нельзя.

Итак, форма скрылась, после этого будет выполняться то что напишите. К примеру Form2.show т.е. показать форму 2 (если она есть конечно).

vb.net
1
2
3
4
5
6
7
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1_Click
 
Me.hide
Form2.show
 
End sub
И вообще сделать переключения между формами можно оператором If (если) then(то). К примеру так

vb.net
1
2
3
4
5
6
7
8
9
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
If me.hide then form2.show 
if form2.hide then me show
 
' ИЛИ ТАК
If me.hide then form2.show else me.show
 
End sub
Все в зависимости от того что вам надо, как надо и где надо
1
probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
28.07.2011, 06:07 3
abbat81, А переменные опубликуй глобальными в новом модуле. Тупо напиши после End class такую строку:
vb.net
1
2
3
4
5
Public module
 
Public per as integer
 
End module
И в любом классе переменную per вызывай и изменяй. Она утратится только после закрытия приложения.
Только за орфографию сомневаюсь) проги под рукой нет. Надеюсь разберёшься.
0
abbat81
29 / 29 / 2
Регистрация: 20.07.2011
Сообщений: 390
28.07.2011, 12:19  [ТС] 4
probit, Вставил под кнопкой в форме:

vb.net
1
2
3
4
5
End Sub
End Class
Public module
    Public per As Integer
End Module
Где module - вызывает "Ошибка 1 Требуется идентификатор."

Добавлено через 17 минут
kOS_77, а как, чтобы form2 продолжила работу з переменными из form1?
0
Памирыч
Почетный модератор
20878 / 8762 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
28.07.2011, 12:43 5
vb.net
1
2
3
Public module
    Public per As Integer
End Module
Пропробуй:
vb.net
1
2
3
Module Module1
    Public per As Integer
End Module
1
abbat81
29 / 29 / 2
Регистрация: 20.07.2011
Сообщений: 390
28.07.2011, 13:00  [ТС] 6
vb.net
1
2
3
4
5
6
7
8
9
Private T As String = 5
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label2.Text = T
If dr.Read() = False Then
                Label1.Text = "44"
            Else
                                Me.Hide()
                Form2.Show()
            End If
Как на form2 подать
Label1.Text = T
Сейчас оно не отображает ничего
0
Памирыч
Почетный модератор
20878 / 8762 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
28.07.2011, 13:06 7
Цитата Сообщение от abbat81 Посмотреть сообщение
Private T As String = 5
Это шутка?
Переменная - строковая, зачем ты ей присваиваешь целочисленное значение.
Потом, нигде не видно, чтобы ты хоть как-то использовал модуль, о котором тебе писали:
vb.net
1
2
3
Module Module1
    Public T As String = "5"
End Module
Ну а потом:
vb.net
1
2
3
4
5
6
7
8
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label2.Text = T
If dr.Read() = False Then
                Label1.Text = "44"
            Else
                                Me.Hide()
                Form2.Show()
            End If
0
Памирыч
Почетный модератор
20878 / 8762 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
28.07.2011, 13:25 8
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Class Form1
    
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim da As Integer = 1
        If da = 1 Then
            Me.Hide()
            Form2.Show()
        End If
    End Sub
End Class
 
Module Module1
    Public T As Integer = 5
End Module
Это первый код. Видишь разницу?
Второй код верный
0
abbat81
29 / 29 / 2
Регистрация: 20.07.2011
Сообщений: 390
28.07.2011, 13:35  [ТС] 9
Да, спасибо.
Понял - integer.
А теперь на вторую форму переменная Т обнуляется а не держит из первой формы значение - 5

Добавлено через 6 минут
Проблема в том, что переменная в процессе получает новое значение и новое значение нужно передать на Форму2.

Напр. "ЕСЛИ да - ТОГДА вреходим на форму2 и со всеми текущими переменными":
Public Class Form1


vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim da As Integer = 1
        If da = 1 Then
            [B]Dim T As Integer = 6[/B]
            Me.Hide()
            Form2.Show()
        End If
    End Sub
End Class
 
Module Module1
    Public T As Integer = 5
End Module
0
probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
28.07.2011, 13:46 10
abbat81, ты её заново объявляешь в области класса. вместо
vb.net
1
Dim T As Integer = 6
поставь
vb.net
1
T=6
Добавлено через 1 минуту
А если нужно чтоб в Frm 2 T=5, то просто убери строчку присвоения переменной T нового значения.
1
abbat81
29 / 29 / 2
Регистрация: 20.07.2011
Сообщений: 390
28.07.2011, 14:06  [ТС] 11
Спасибо большое - помогли понять.
Итого:
Ставится в конце после End Class или как вижу - перед классом можно, но за его пределами.

vb.net
1
2
3
Module Module1
    Public T As Integer = 5
End Module
Для получения нового значения от переменной нужно не присваивать
Dim T As Integer = 6
а просто Т=6

P.S. Это я написал дял себя, чтобы не поднимать больше подобного вопроса.
Спасибо.
0
probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
28.07.2011, 14:28 12
abbat81,
Так же ты можешь написать так:
vb.net
1
2
3
Module Module1
    Public T As Integer 
End Module
и потом присвоить значение переменной T, где тебе заблагорассудится. Важно понять, что модулями удобно пользоваться для объявления глобальных переменных.
И ещё... строкой "Dim T As Integer = 6" мы переобъявляем переменную, то есть меняем видимость, и только потом присваиваем ей 6.
1
abbat81
29 / 29 / 2
Регистрация: 20.07.2011
Сообщений: 390
28.07.2011, 14:40  [ТС] 13
И все-таки, как запустить процесс, который в форме без отображения формы.

vb.net
1
2
3
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Hide()
 End Sub
а вот:

vb.net
1
2
3
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Hide()
    End Sub
Прячет.
Мне просто нужно то, что у меня происходит в форме (обработка в БД) происходило невидимо.
0
probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
28.07.2011, 14:46 14
abbat81, попробуй поставить свойство у Form2 opacity 0% , и вызывай её так
vb.net
1
2
Form2.show
me.close
Не забудь св свойствах проекта поставить завершение приложения, когда будет закрыта последняя форма.
1
kOS_77
193 / 185 / 9
Регистрация: 14.06.2011
Сообщений: 495
28.07.2011, 18:28 15
А не проще присваивать значения чему либо и обращаться к этому "чему либо" из другой формы ?
0
Памирыч
Почетный модератор
20878 / 8762 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
28.07.2011, 19:06 16
abbat81, а какие такие "процессы" должны протекать без формы?
0
Ciberst
507 / 420 / 19
Регистрация: 16.12.2010
Сообщений: 939
28.07.2011, 19:21 17
abbat81, предлагаю тебе более качественно обдумать код, конечный итог должен быть таким - без "второй невидимой формы".
А если хочешь качественное решение, то неплохо было бы проект прикрепить.
1
abbat81
29 / 29 / 2
Регистрация: 20.07.2011
Сообщений: 390
28.07.2011, 21:42  [ТС] 18
Цитата Сообщение от Памирыч Посмотреть сообщение
abbat81, а какие такие "процессы" должны протекать без формы?
Цитата Сообщение от Ciberst Посмотреть сообщение
abbat81, неплохо было бы проект прикрепить.
Процессы и проект таковы, что уже есть написаное дело, в форме, делает запрос в базу данных, ищет совпадениЕ, если найдено, то в строке, где найдено, производит вычитание из другой спеуиальной ячейки каждую секунду. Все это происходит в форме, для проверки на лейблах отображает, все работате, а теперь как мне заставить сие без формы работать?
0
probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
28.07.2011, 21:51 19
abbat81, просто переведи весь код из класса формы на свой личный класс.
vb.net
1
2
3
4
5
Public class считаем
Public sub New
T = 5
End sub
End Class
Только учитывай, что в твоём классе не будет разных элементов управления(лэйбэлов, кнопок), так что не пытайся обращаться к ним.
2
abbat81
29 / 29 / 2
Регистрация: 20.07.2011
Сообщений: 390
29.07.2011, 00:52  [ТС] 20
Как вызвать этот класс?
vb.net
1
2
3
4
5
6
7
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form2.show ' вместо формы2 нужно запустить
        считаем.START
 
Me.Hide()
 
    End Sub
0
29.07.2011, 00:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2011, 00:52

В зависимости от значения одной переменной задать значение другой
Здравствуйте! Есть переменные x1, x2, x3 и y. Нужно чтобы когда y = 1, то x1 =...

Задать область видимости массива для всех модулей
Здравствуйте! Скажите пожалуйста: Sub zx() Dim a(10, 10) As Byte...

Переменная, область видимости для нескольких форм
Здравствуйте форумчане! Объясните, как создать переменную, на допустим 2...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru