Официальный сайт студ.городка НГТУ
Программирование и БД » Как в VB.net передача данных между окнами(формами) 

#1  24.11.05 03:35

Как в VB.net передача данных между окнами(формами)

Только без смеха, под Visual ни когда не программировал тем более на Basic'е, только что начал изучать и желательно до утра написать программу(ей богу не для себя стараюсь) ...
К делу.. есть две формы Form1 и Form2
Скажем при нажатии кнопки на Form1  вызывается Form2 на которой помещены текстовое поле и кнопка

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim text As TextBox
        text = TextBox1
        MsgBox(text.Text)
        Close()
    End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub
End Class

Хочу что бы при нажатии кнопки Form2  присваивала переменной text значение, введенное в текстовое поле и передавало его в Form1...
Так вот как мне сделать, что бы переменную текст или её значение можно было прочитать не только в Form2 но и в Form1..
Прошу прощения за приметивное изложение, по другому пока не умею..

Исправлено eagle (24.11.05 03:36)

Offline

#2  24.11.05 09:30

Re: Как в VB.net передача данных между окнами(формами)

Form1.Textbox1.Text = "bla" ?

Offline

#3  24.11.05 22:50

Re: Как в VB.net передача данных между окнами(формами)

Чего то не катит... но все ровно спасибо..

Offline

#4  25.11.05 17:48

Re: Как в VB.net передача данных между окнами(формами)

А поподробней можно...

Offline

#5  25.11.05 22:19

Re: Как в VB.net передача данных между окнами(формами)

Во блин.. на Программинге все програмеры перевелись.. или 6ку от сети отключили, элементарный вопрос и все молчат

Исправлено eagle (25.11.05 22:19)

Offline

#6  25.11.05 22:28

Re: Как в VB.net передача данных между окнами(формами)

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

Offline

#7  26.11.05 00:07

Re: Как в VB.net передача данных между окнами(формами)

Form1.Textbox1.Text = "bla" ?
эта штука вроде как не ругается но данные в Form1 Textbox1 остаются прежнеми а не "Bla" :-)
Слышал что можно все это как то через События осуществить(event), но как конкретно не знаю..

Исправлено eagle (26.11.05 00:08)

Offline

#8  26.11.05 02:51

Re: Как в VB.net передача данных между окнами(формами)

Ну я бы так не сказал что VB это что - то унижающее, пол нархоза кодят на VB Пишут дипломы и ни кто ещё ни разу не сказал что Visual Basic  недостоен существования..
Так ни кто не в курсе как это реализовать(я про сабж)

Исправлено eagle (26.11.05 02:52)

Offline

#9  26.11.05 09:52

Re: Как в VB.net передача данных между окнами(формами)

Код: 'csharp':

public class Form1 : Form
{
        private Form2 mForm2;
        private void button1_Click(object sender, EventArgs e)
        {
            mForm2 = new Form2(this);
            mForm2.Show();
        }
}
 
public class Form2 : Form
{
        private Form1 mForm1;
	public Form2(Form1 pForm1)
	{
		InitializeComponent();
                 mForm1 = pForm1;
	}
        private void button1_Click(object sender, EventArgs e)
        {
            mForm1.Text = textBox1.Text;
        }
}

Форма2 создается из формы1. У них есть ссылки друг на друга. Ну а как после этого ты будешь взаимодействие делать - твое дело, можешь напрямую свойства дергать, насоздавать кучу событий, и т.д.


про. написал(а):

ты на шестерку не гони. просто VB, тем более VB.NET ниже программисткого достоинтства.

VB.NET, начиная с .net 2.0 (до этого у него были незначительные отставания от C#, сейчас не вспомню какие), ничем не хуже любого другого языка. Особенно для реализации корпоратиыных приложений. Да и вообще, язык - это всего лишь инструмент (согласен что он может быть более или менее удобным), все зависит от человека. На любом языке можно написать бредовый, падучий и нечитаемый код.

Исправлено Logos (26.11.05 09:54)

Offline

#10  26.11.05 10:38

Re: Как в VB.net передача данных между окнами(формами)

2 Logos: спасибо, за наше счастливое утро :)

Offline

#11  26.11.05 13:46

Re: Как в VB.net передача данных между окнами(формами)

Присоединяюсь к спасибу :)  .....
А я вот ещё в MSDN накопал кое-что, только откровенно ни чего не понял и не одно из предложенного у меня не заработало, наверно это все из=за нулевого опыта..
Кому интересно..


http://www.microsoft.com/Rus/Msdn/Activ … /217a.mspx
___________________________________________________________________________________
Совет 217a. Как передавать данные между формами

Читатель прислал нам такой вопрос
«Пишем программу на VB4/16, и не можем передать переменную или массив из одной формы в другую. Если Вас не затруднит, помогите советом.»

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

1. Передача параметров через свойства объектов
Для этого создадим две формы Form1 и Form2, на каждой из которых разместим текстовое поле и командную кнопку. При такой последовательности создания форм в качестве стартовой формы приложения будет выбрана Form1. В VB4 этот параметр корректируется командой Tools|Options|Project|Startup Form, в VB5/6 — Project|Project Properties|General|Startup Object. Для элементов Form2 установим имена элементов управления как Text2 и Command2 соответственно (чтобы отличать зрительно объекты по их именам), а также Text2.Text = «Text2». Для кнопок Command1 и Command2 установим соответственно такие свойства Caption: «Запустить Form2» и «Вернуть управление в Form1». И напишем для них следующий программный код:

Private Sub Command1_Click()
  Form2.Show 1 ' вывод Form2 в модальном режиме
End Sub

для формы Form2 (для внешнего элемента управления Text1 обязательно указание имени формы Form1):

Private Sub Form_Activate()
  ' установка при запуске формы
  Text2.Text = Form1.Text1.Text
  Form1.Text1.Text = "" 'очистить поле
End Sub
Private Sub Command2_Click()
  ' Возврат в Form1
  ' переписываем содержимое Text2 в Text1
  Form1.Text1.Text = Text2.Text
  Form2.Hide ' закрыть форму
End Sub

Обратите внимание, что форма Form2 запускается в модальном режиме (значение параметра равно 1). Это означает, что фокус приложения переходит в Form2 — родительская форма Form1 остается видимой, но недоступной для каких-либо операций. Запустите приложение и нажмите кнопку «Запустите Form2» — появится форма Form2, при этом в поле Text2 будет записано содержимое Text1. (Само поле Text1 при этом очистится). Теперь нажмите «Вернуть управление в Form1» — управление вернется в Form1 и в поле Text1 будет установлено содержимое Text2. (Вы можете сами устанавливать содержимое полей, чтобы убедиться в правильности обмена информацией.)

Таким образом мы видим, как происходит передача информации от одной формы к другой в виде установки или чтения свойств элеменов управления. Все формы и находящиеся на них элементы управления являются глобальными: их свойства и методы доступны из процедур других модулей (в том числе BAS-модулей). Вот как выглядит полное имя элемента управления:

[Имя_Формы.]Имя_Элемента_Управления

При обращении к внутренним элементам управления (внутри данной формы) можно указывать сокращенное имя объекта (что мы и делаем), а при работе с внешними — полное, которое начинается с имени формы.

2. Передача данных через параметры процедур
Продолжим наши эксперименты. Создадим на форме Form1 еще одну командную кнопку, для которой установим свойства Name = Command11 и Caption = «Второй вариант запуска», и напишем для нее такой код:

Private Sub Command11_Click()
  ' второй вариант запуска
  Call Form2.Text2_KeyPress(65)
End Sub

Для поля Text2 на форме Form2 напишем следующую процедуру:

Листинг 5.

Public Sub Text2_KeyPress(KeyAscii As Integer)
  Show  ' запуск формы Form2 в немодальном режиме
  Text2.Text = "Значение = " & KeyAscii
End Sub

Запустите на выполнение приложение, нажмите на форме Form1 кнопку Command21 и вы увидите картину, изображенную на   Рис. 1. рисунке.

В этом примере мы обратились из формы Form1 напрямую к процедуре Form2 (в данном случае к Text2_KeyPress) и даже передали в нее информацию в виде параметра процедуры. Но обратите внимание, что выше мы установили для событийной процедуры Text2_KeyPress тип Public, вместо Private по умолчанию.

Очевидно, что такое использование встроенной событийной процедуры является довольно искусственным и ограниченным по возможностям — мы можем использовать только весьма простые, предопределенные варианты передачи параметров. К тому же можно столкнуться с тем, что эти процедуры неожиданно выполняют еще какие-то встроенные операции, которые нам тут не нужны.

Гораздо лучше для реализации второго варианта создать в Form2 простую процедуру, например с именем Start3 (но обязательно типа Public):

Листинг 6.

Public Sub Start3(StartName$)
  Show 'запуск формы Form2
  Text2.Text = StartName$
End Sub

а в процедуре Command11_Click (форма Form1) записать такой код:

Листинг 7.

Private Sub Command11_Click()
  Call Form2.Start3("Третий вариант запуска")
End Sub

Очевидно, что в этом случае мы может реализовать любой вариант передачи параметров из Form1 в Form2, в том числе и массивы.

Совсем другой вопрос — что мы будем делать с передаваемыми параметрами? В приведенном здесь примере мы их сразу использовали для формирования свойств объектов. А можно переписать эти данные в глобальные переменные на уровне данного модуля (формы), которые затем передать в другие процедуры.

3. Передача данных через глобальные переменные
Еще один вариант передачи данных между модулями — использование глобальных переменных, доступ к которым разрешен из любых процедур приложения. Однако нужно иметь в виду, что в VB такие переменные можно создавать только в модуле кода BAS. Поэтому если вы хотите, чтобы обе созданные нами формы работали с общими данными, то нужно создать BAS-модуль и в нем описать соответствующие глобальные переменные:

Листинг 8.

Global MyArray$(), MyVar As Integer

В форме Form1 создадим еще одну командную кнопку Command12 и запишем для нее такой код:

Листинг 9.

%
Private Sub Command12_Click()
  ' передача данных через глобальные переменные
  ReDim MyArray$(200)
  MyArray$(1) = "Элемент1"
  MyVar = 1001
  Call Form2.Start4
End Sub

В форме Form2 сформируем еще одну процедуру:

Листинг 10.

Public Sub Start4()
  Form1.Text1.Text = MyArray$(1)
  Text2.Text = MyVar
  Show
  MsgBox UBound(MyArray$)
End Sub

Запустите приложение на выполнение и убедитесь, что при нажатии кнопки Command12 передача данных в Form2 выполняется правильно. Обратите внимание, что в модуле формы Form1 мы не только устанавливаем значения глобальных переменных, но и можем изменять размер массивов, объявленных динамическими.
_____________________________________________________________________
Похоже отличия между версиями Basic все же значительны...

Исправлено eagle (26.11.05 14:02)

Offline

#12  26.11.05 14:24

Re: Как в VB.net передача данных между окнами(формами)

Вопросик Logos'у, а ты в чем писал?  то ли я страшно туплю, то ли  Visual Studia 2003.net непонимает половины написанного :(

Исправлено eagle (26.11.05 14:28)

Offline

#13  26.11.05 14:26

Re: Как в VB.net передача данных между окнами(формами)

2 eagle: это C#, студия понять должна, просто тебе надо то же самое в VB конвертнуть

Offline

#14  26.11.05 14:29

Re: Как в VB.net передача данных между окнами(формами)

Ого! Сенкс, а как это сделать? :) Просто ручками думаю не удастся, потому что ну не шарю я пока не в одном, а тем более в 2 одновременно :(
_____________________________
Так и знал что ступил...

Исправлено eagle (26.11.05 14:32)

Offline

#15  26.11.05 14:41

Re: Как в VB.net передача данных между окнами(формами)

Код: vb.net:

Public Class Form1
	 Inherits Form
        Private mForm2 As Form2
        Private  Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
            mForm2 = New Form2(Me)
            mForm2.Show()
        End Sub
End Class
 
Public Class Form2
	 Inherits Form
        Private mForm1 As Form1
	Public  Sub New(ByVal pForm1 As Form1)
		InitializeComponent()
                 mForm1 = pForm1
	End Sub
        Private  Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
            mForm1.Text = textBox1.Text
        End Sub
End Class

Offline

#16  26.11.05 14:46

Re: Как в VB.net передача данных между окнами(формами)

Спасибо огромное !

Offline

#17  26.11.05 19:31

Re: Как в VB.net передача данных между окнами(формами)

Получается что таким образом можно передавать только значение одной переменной через заголовок... :( Как быть тогда когда требуется пердать больше..

Offline

#18  26.11.05 23:18

Re: Как в VB.net передача данных между окнами(формами)

Зачем через заголовки? Заголовок это для примера. Ты можешь создавать и дергать любые свойства у форм.

Исправлено Logos (26.11.05 23:43)

Offline

#19  26.11.05 23:28

Re: Как в VB.net передача данных между окнами(формами)

Private  Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
            mForm1.textBox1.Text = "qweqweqwe"
        End Sub

Offline

#20  27.11.05 02:46

Re: Как в VB.net передача данных между окнами(формами)

Андрюха, нам чуть чуть пива не хватило что бы доделать ;-) Мы кое-что не заметили.. сейчас поправил и в правду все заработало :)
Спасибо всем за исчерпывающий ответ!

Исправлено eagle (27.11.05 02:47)

Offline

#21  27.11.05 03:09

Re: Как в VB.net передача данных между окнами(формами)

Я так понимаю что если в Form1 объявить публичную переменную(по логике что все объекты формы идут как публичные), то она тоже должна быть видна в Form2
Что то типа

Код: vb.net:

Form1
 
 Private mForm2 As Form2
 Public rut As String 'Объявляем её родимую
(.....)
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
mForm2 = New Form2(Me)
        mForm2.TextBox1.Text = Text1.Text
        mForm2.TextBox2.Text = Text2.Text
        mForm2.ShowDialog()
        Text1.Text = mForm2.TextBox1.Text
        Text2.Text = mForm2.TextBox2.Text
       MsgBox(rut) ' Пытаемся воспроизвести присвоенное ей значение при нажати батона в Form2
End Sub

Код: vb.net:

Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
mForm1.rut = "dfdf" 'присваевает rut значение dfdf
Close()
End Sub

То по идеи Месаджбокс мне должен показать dfdf, после закрытия модальной формы Form2
но он мне показывает пустoту, почему это не должно работать... все происходит без ошибок

Исправлено eagle (27.11.05 03:17)

Offline

#22  27.11.05 11:13

Re: Как в VB.net передача данных между окнами(формами)

eagle написал(а):

Я так понимаю что если в Form1 объявить публичную переменную(по логике что все объекты формы идут как публичные), то она тоже должна быть видна в Form2
Что то типа

по умолчанию в сях все элементы формы идут приватными, мож поможет

Offline

Программирование и БД » Как в VB.net передача данных между окнами(формами) 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.122 сек.
Выполнено 14 запросов.