Страница: 1 |
Страница: 1 |
Вопрос: Вопрос для знающих из области общих знаний
Добавлено: 27.04.06 21:48
Автор вопроса: Сергей | ICQ: 238974223
Пишу программу на Visual basic.NET и столкнулся с такой трудностью. Есть две формы например form1 и form2. В форме один происходит выполнение кода и в результате некоторой переменной присваивается значение. Так вот как передать значение из одной формы в другую. Я посмотрел как в VB6 было - переменная делается глобальной и вроде должно работать. Может что изменили в NET или я не в том месте объявляю пременную как глобальную. Или какие-то нюансы есть тут. В общем сомнений много, по этому решил обратиться к более опытным программистам чем сам. Заранее благодарен всем кто откликнется.
Вот так например:
********************************
код в form1:
public str as string = ""
private sub strdiff()
str= "Hello"
end sub
********************************
код в form2:
private sub strshow()
textbox1.text = str
end sub
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 27.04.06 23:10
ну что значит глобально в шестой? В модуле ж наверное... попробуй и в .нете в модуле переменную опиги
Номер ответа: 2
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #2
Добавлено: 27.04.06 23:20
Если уже пишем на .NET так данайте писать по правилам OOD, т.е. переменная класса (формы) private, и построить функции или properties для set and get value
Номер ответа: 3
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #3
Добавлено: 27.04.06 23:50
Что бы не мучится с ООП, внвчале для простоты сделай так.
1. Объяви переменную ка статическую в классе (можно сказать -аналог глобальной).
Public Shared asd As Integer
В классе формы 2
Dim ddf As Form1
И изменяем значение.
ddf.asd = 777
End Sub
Номер ответа: 4
Автор ответа:
Сергей
ICQ: 238974223
Вопросов: 4
Ответов: 8
Профиль | | #4
Добавлено: 28.04.06 11:33
Спасибо всем за помощь.
Номер ответа: 5
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #5
Добавлено: 28.04.06 20:16
Это не глобальная переменная, это статическая переменная класса.
Чтобы реально была глобальной, надо объявлять в модуле. Создай модуль и добавь в него
Это будет правильно.
Если хочешь сэкономить на количестве файлов, то можешь добавить модуль в файл с классом формы:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
aaa = 777
Dim foo As New Form2
foo.Show()
End Sub
End Class
Public Module Publa
Public aaa As Integer
End Module
Но это плохая тактика, хотя переменные и будут глобальными.
Номер ответа: 6
Автор ответа:
Эндрю
ICQ: 303-304-826
Вопросов: 24
Ответов: 103
Web-сайт:
Профиль | | #6
Добавлено: 04.05.06 00:31
Neco:
Dim foo As New Form2
foo.Show
Я таким образом создавал несколько форм. Затем столкнулся с проблемой: какое-нибудь действие должно выполняться на все созданные формы, но я этого сделать не смог т.к. формы с именем foo VB не видит. Получилось только на Form2. Подскажите как это исправить. У меня VB 6.
Номер ответа: 7
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #7
Добавлено: 04.05.06 06:46
Надо создавать глобальный массив или коллекцию, добавлять туда эти формы при создании и потом в теле цикла For...To или For Each...In вызывать необходимый метод.
Номер ответа: 8
Автор ответа:
Nj
ICQ: 223663115
Вопросов: 21
Ответов: 285
Профиль | | #8
Добавлено: 04.05.06 13:06
2 Эндрю
и объявлял бы
Dim WithEvents foo As New Form2
а в форме2 такая процедурка
Private foo_КакойтоEvent(Всякие переменные)
с кодом.
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 04.05.06 13:27
Ну объяви объектные переменные в модуле, ту же коллекцию, какая нах разница.
ЗЫ Охота посмотреть как VB6 даст тебе объявить WithEvents as New
Если есть желание - можно через Set сделать...
Номер ответа: 10
Автор ответа:
Nj
ICQ: 223663115
Вопросов: 21
Ответов: 285
Профиль | | #10
Добавлено: 06.05.06 14:08
Номер ответа: 11
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #11
Добавлено: 06.05.06 14:26
Да это не проблема - объяви без New, затем в коде загрузки Set = New ...
С массивами форм будет чуть сложнее, но не намного. Все дело в том что эвенты здесь вроде как и не нужны Всего делов - объявить переменную в модуле.
К примеру поста N6
Dim foo As New Form2
foo.Show
перепишем
'код модуля
Public foo As Form2
'код где-то в форме...
Set foo = New Form2
foo.Show
Форма foo будет доступна из любого места проекта.
Номер ответа: 12
Автор ответа:
Эндрю
ICQ: 303-304-826
Вопросов: 24
Ответов: 103
Web-сайт:
Профиль | | #12
Добавлено: 08.05.06 01:38
§Ў §Ь§С§Ь §Ю§а§Ш§Я§а §а§Т§а§Ы§д§Ъ§г§о §Т§Ц§Щ §и§Ъ§Ь§Э§С? §Ґ§а§б§е§г§д§Ъ§Ю, §Х§а§Э§Ш§Я§а §У§н§б§а§Э§Я§с§д§о§г§с ЎЦ100'000 §а§Х§Ъ§Я§С§Ь§а§У§н§з §Х§Ц§Ы§г§д§У§Ъ§Ы §а§Х§Я§а§У§в§Ц§Ю§Ц§Я§Я§а, §Ъ §б§Ъ§з§С§д§о §У§г§Ч §п§д§а §У §и§Ъ§Ь§Э §Я§Ц§в§Ц§Я§д§С§Т§Ц§Э§о§Я§а.
Номер ответа: 13
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #13
Добавлено: 08.05.06 02:33
Эндрю, нифига ссе.. Где траву брал?
Номер ответа: 14
Автор ответа:
Эндрю
ICQ: 303-304-826
Вопросов: 24
Ответов: 103
Web-сайт:
Профиль | | #14
Добавлено: 09.05.06 00:23
Где брал там уже нет. Всё скосили... И уложили в стога!!!
Номер ответа: 15
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #15
Добавлено: 12.05.06 00:00
Можно передавать любой объект
Только надо его объявить Шаред в начале формы
А в лоаде указать какой конкретно объект
на форме ему соответствует
Class Form1
Public Shared MyTextbox As textbox
....
Form1_Load
MyTextBox=TextBox1
-------------------------
Вызов
Dim NewMyForm As New Form1
NewMyForm.MyTextBox.TExt="привет из другой формы"
НО, осторожно с тредами.