Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Взаимодействие между элементами форм


Автор: Гость_Leff 20.11.2005, 07:40
Чувствую себя полным дураком smile ! Я не могу понять каким образом имея, например, две формы, можно в текстовое поле одной формы (активной) получить значение из текстового поля второй формы.

Что бы Вы приблизительно поняли о чем я говорю, могу сказать, что в Delphi это можно было сделать следующим образом. По какому-либо событию формы 2, выполнялась следующая строка:

Код

TextBox1.Text:=form2.TextBox1.Text;


Надо ли для выполнения этого в VB.NET в каждом класе форм создавать своиство, при помощи которого будет осуществляться доступ к её элементам (из других класов) smile smile

Автор: Exception 20.11.2005, 12:08
Да, это довольно досадная проблема.. Правда в VB .NET 2.0 она уже решена...
А так - создай новый модуль, а в нем напиши:
Код

Module Main
Public myform1 As New Form1(),
myform2 As New Form2()
Sub Main()
Application.Run(myform1)
End Sub
End Module

Теперь ты можешь показать форму 2 так:
Код

myform2.ShowDialog()

, не заботясь о ее создании.
Обратиться к текстбоксу можно также:
Код

MsgBox(myForm2.mytxt.Text))

Автор: Гость_Leff 21.11.2005, 11:52
И на том спасибо, хотя решение конечно не очень красивое. А всё таки, каким же образом эта проблема решена в VB.NET 2.0, да и что именно ты подразумеваешьпод этим - VS 2005.

Автор: Exception 21.11.2005, 12:00
VS 2005 = Visual Studio 2005.
В VB .NET 2.0 появилось пр-во имен My, в нем есть до кучи полезных вещей, в т.ч. и коллекция форм приложения. О нововведениях можно почитать на http://msdn.microsoft.com.

Автор: Guest 21.11.2005, 20:16
Обязательно зайду.

(!ув. Администрация портала, не ругайтесь, чтовопрос не совсем в своей теме!). Ещё с ходу вопрос, не знает ли кто-нибудь в VB.NET аналога дельфевской процедурки SendMessage? Как я понимаю с её помощью можно посылать "сообщения" (команды) окнам.

На странице Light Alloy (http://www.softella.com/ - мой любимый проигрыватель видео) есть пример процедуры при помощи которой можно управлять им. Однако пример на Delphi:

Код

procedure LightAlloyFullScreen;
var
  Wnd:HWND;
begin
  Wnd:=FindWindow('LightAlloyFront',NIL);
  if (Wnd<>0) then
    SendMessage(Wnd,WM_LACMD,LAC_WINDOW_FULLSCREEN,0);
end;


Я уверен, что то же самое можно проделать и в VB.NET, но как... smile Мои попытки закончились на подключении к процессу.

Автор: Exception 21.11.2005, 22:42
Просто объяви нужные API и пользуй..
Код

Private Declare Auto Function FindWindow'описание ищи отдельно

Автор: Novator 22.11.2005, 00:29
Что именно мне это даст? Мне интересен не FindWindow, а SendMessage.

Автор: Exception 22.11.2005, 10:02
Ну и его объяви.. Какая проблема? Описание есть в том же MSDN

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)