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

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

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

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

Например есть button1 на form1
нажимаем на кнопку, переходим к другому коду. (он сейчас на form2) и как в этом случае еще перенести переменные на form2?
http://www.cyberforum.ru/vb-net/thread2220013.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2011, 01:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Задать область видимости переменной для всех форм (Visual Basic .NET):

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

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

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

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

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

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
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
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
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
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
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
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
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
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
Привет! Вот еще темы с решениями:

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

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

Как задать область видимости?
Как задать область видимости для объектов в Delphi? Может есть модификаторы...

Область видимости переменной
Здравствуйте! Пишу вот такой код(знаю, что не совсем красивый), но...


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

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

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