Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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-сайт: www.hypertech.ru
 Профиль | | #2
Добавлено: 27.04.06 23:20
Если уже пишем на .NET так данайте писать по правилам OOD, т.е. переменная класса (формы) private, и построить функции или properties для set and get value

Ответить

Номер ответа: 3
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #3
Добавлено: 27.04.06 23:50
Что бы не мучится с ООП, внвчале для простоты сделай так.

1. Объяви переменную ка статическую в классе (можно сказать -аналог глобальной).

Public Class Form1
Public Shared asd As Integer

В классе формы 2

Public Class Form2
Dim ddf As Form1

И изменяем значение.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ddf.asd = 777
    End Sub

Ответить

Номер ответа: 4
Автор ответа:
 Сергей



ICQ: 238974223 

Вопросов: 4
Ответов: 8
 Профиль | | #4 Добавлено: 28.04.06 11:33
Спасибо всем за помощь.

Ответить

Номер ответа: 5
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #5
Добавлено: 28.04.06 20:16
Это не глобальная переменная, это статическая переменная класса.

Чтобы реально была глобальной, надо объявлять в модуле. Создай модуль и добавь в него

public a as integer

Это будет правильно.

Если хочешь сэкономить на количестве файлов, то можешь добавить модуль в файл с классом формы:
Public Class Form1
    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-сайт: www.пока_нет.ru
 Профиль | | #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-сайт: neco.pisem.net
 Профиль | | #7
Добавлено: 04.05.06 06:46
Надо создавать глобальный массив или коллекцию, добавлять туда эти формы при создании и потом в теле цикла For...To или For Each...In вызывать необходимый метод.

Ответить

Номер ответа: 8
Автор ответа:
 Nj



ICQ: 223663115 

Вопросов: 21
Ответов: 285
 Профиль | | #8 Добавлено: 04.05.06 13:06
2 Эндрю
какое-нибудь действие должно выполняться на все созданные формы
Я бы попробовал создать эвент, и вызывал бы его RaiseEventом
и объявлял бы
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
Dim WithEvents foo As New Form2
.. это я сказанул - но ведь как-то же было ... подобная фигня с эвентами описана в учебнике... надо найти и еще разок перечитать

Ответить

Номер ответа: 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-сайт: www.пока_нет.ru
 Профиль | | #12
Добавлено: 08.05.06 01:38
§д§Ц§Э§Ц §и§Ъ§Ь§Э§С For...To §Ъ§Э§Ъ For Each...In §У§н§Щ§н§У§С§д§о §Я§Ц§а§Т§з§а§Х§Ъ§Ю§н§Ы §Ю§Ц§д§а§Х.

§Ў §Ь§С§Ь §Ю§а§Ш§Я§а §а§Т§а§Ы§д§Ъ§г§о §Т§Ц§Щ §и§Ъ§Ь§Э§С? §Ґ§а§б§е§г§д§Ъ§Ю, §Х§а§Э§Ш§Я§а §У§н§б§а§Э§Я§с§д§о§г§с ЎЦ100'000 §а§Х§Ъ§Я§С§Ь§а§У§н§з §Х§Ц§Ы§г§д§У§Ъ§Ы §а§Х§Я§а§У§в§Ц§Ю§Ц§Я§Я§а, §Ъ §б§Ъ§з§С§д§о §У§г§Ч §п§д§а §У §и§Ъ§Ь§Э §Я§Ц§в§Ц§Я§д§С§Т§Ц§Э§о§Я§а.

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 08.05.06 02:33
Эндрю, нифига ссе.. Где траву брал?

Ответить

Номер ответа: 14
Автор ответа:
 Эндрю



ICQ: 303-304-826 

Вопросов: 24
Ответов: 103
 Web-сайт: www.пока_нет.ru
 Профиль | | #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="привет из другой формы"


НО, осторожно с тредами.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам