Вызов процедуры из Form2

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Вызов процедуры из Form2

Сообщение Лохматый » 28.06.2005 (Вт) 17:06

Подскажите, пожалуйста, как можно вызвать процедуру из Form2, если:
1. создал окно Form1 и добавил кнопку, и в код нужную мне процедуру.
2. создал окно Form2 и добавил кнопку и обработчик клик, при нажатии на который, должна вызываться процедура.

Если нужная мне процедура имеет зеачение public, а в обработчике клик пишу
dim f1 as form1
f1.proc()

proc - нужная процедура
Этот код не работает!
Что мне делать?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Вызов процедуры из Form2

Сообщение Viper » 28.06.2005 (Вт) 17:28

Дело в том что этот код не создает форму form1, он ее только объявляет
Лохматый писал(а):
Код: Выделить всё
dim f1 as form1
f1.proc()



следовательно и выполнить метод объекта ты не сможешь. Надо получить ссылку на ранее созанный объект типа form1 и вот тогда уже можно будет выполнить метод
Весь мир матрица, а мы в нем потоки байтов!

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 28.06.2005 (Вт) 17:30

Так, что собственно делать?
А зачем создавать форму, она ведь уже создана?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 28.06.2005 (Вт) 17:39

так и получи на нее ссылку, и будет тебе счастье

создай форму с областью видимости public и ссылайся потом на нее

код должен быть примерно такой:
Код: Выделить всё

'в объявлениях Form1
Public f1 As Form1()

...

'создаем Form1:
f1 = New Form1()

...

'в коде Form2 в обработчике клика кнопки

Form1.f1.proc()



и всех делов
Весь мир матрица, а мы в нем потоки байтов!

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 28.06.2005 (Вт) 18:18

1. f1 = new form1() - подчёркивается, и где именно это писать?
2.в форме2 когда пишу form1. - после точки не появляется f1...
3. Что токое объявления? Это сразу после public class form1?

Ваня
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 24.06.2005 (Пт) 22:23
Откуда: Московская обл., д. Нестерово

Сообщение Ваня » 28.06.2005 (Вт) 22:03

Код: Выделить всё
Public Class Form1
    Public Sub Proc(ByVal txt As String)
        MessageBox.Show(txt)
    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Me.Proc("Из Form1")
        Dim f2 As New Form2
        f2.Show()
    End Sub
End Class


Код: Выделить всё
Public Class Form2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form1.Proc("Из Form2")
    End Sub
End Class

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 29.06.2005 (Ср) 16:27

Ещё раз спасибо, но ты сам пробовал что сделал?
1. me.proc() - выполняет процедуру до открытия Form2.
2. В 2-й форме после слова Form1. появляется выбор, где нет моей процедуры.
Неужели нет выхода?

Ваня
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 24.06.2005 (Пт) 22:23
Откуда: Московская обл., д. Нестерово

Сообщение Ваня » 29.06.2005 (Ср) 22:26

Пробовал!

1. me.proc() - выполняет процедуру до открытия Form2.
- так и есть. В msgbox так и пишется, что вызов "из Form1"

2. В 2-й форме после слова Form1. появляется выбор, где нет моей процедуры.
Неужели нет выхода?
У меня появляется и всё работает. При нажатии кнопки на Form2 появляется сообщение MsgBox "из Form2"

У тебя какой VB? 2003? А у меня 2005.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.06.2005 (Чт) 4:52

Мда...

Господа, вы концепции объектно-ориентированного программирования поизучайте, а?
В частности, чем класс отличается от экземпляра класса.

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

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 30.06.2005 (Чт) 9:40

GSerg


Чё вернули? Блин, а уж как код на 2005 а и не знал, ну хрен, я больше сюда не ногой.

Тото смотрю глаза режет:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Form1.Proc("Из Form2")
End Sub
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 06.07.2005 (Ср) 23:12

Так как всё же в 2003 net сделать вызов процедуры?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.07.2005 (Чт) 6:22

Изучить азы объектно-ориентированного программирования.
Создать экземпляр формы.
Вызвать его метод.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 07.07.2005 (Чт) 16:38

GSerg писал(а):Изучить азы объектно-ориентированного программирования.
Создать экземпляр формы.
Вызвать его метод.

Хорошо, спасибо, я не против. Можно хоть ссылку дать, где прочитать, или намек как сделать? Как создать экземпляр формы?

Ваня
Новичок
Новичок
 
Сообщения: 27
Зарегистрирован: 24.06.2005 (Пт) 22:23
Откуда: Московская обл., д. Нестерово

Сообщение Ваня » 07.07.2005 (Чт) 21:57

Сначала сделай Startup object = sub main (это в меню редактора VBnet: Project --> НазваниеПроектаProperties)

Код: Выделить всё
Module Start
  Public StartingForm As Form1

  Public Sub main()
    StartingForm = New Form1
    Application.Run(StartingForm)
  End Sub

End Module


Код: Выделить всё
Public Class Form1
    Public Sub Proc(ByVal txt As String)
        MessageBox.Show(txt)
    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Me.Proc("Вызов Proc находясь в Form1")
        Dim f2 As New Form2
        f2.Show()
    End Sub
End Class


Код: Выделить всё
Public Class Form2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Start.StartingForm.Proc("Вызов Proc находясь в Form2")
    End Sub
End Class


Должно получиться.

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 15.07.2005 (Пт) 23:41

Спасибо большое! Всё получилось.

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 01.08.2005 (Пн) 7:04

Хммм... все работает, спасибо

Для блондинов, которые в танке.
получается, что если нарисовать в дизайнере форму (frmStart например)
и стартовать с нее проект, то экземпляр frmStart не будет создан???

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 01.08.2005 (Пн) 7:31

kroskros писал(а):Хммм... все работает, спасибо

Для блондинов, которые в танке.
получается, что если нарисовать в дизайнере форму (frmStart например)
и стартовать с нее проект, то экземпляр frmStart не будет создан???


Будет, куда он денется то, если он является стартовым объектом. А если стартовый объект sub Main(), то frmStart должна создаваться ручками, типа

Код: Выделить всё
Dim frmStart as New frmStart()


и делай с ней все что надо и хочется
Весь мир матрица, а мы в нем потоки байтов!

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 01.08.2005 (Пн) 7:54

Будет, куда он денется то, если он является стартовым объектом. А если стартовый объект sub Main(), то frmStart должна создаваться ручками, типа

Код: Выделить всё
Dim frmStart as New frmStart()


и делай с ней все что надо и хочется[/quote]

нет я понимаю, что экземпляр обязан быть...
значит так: рисую форму. В свойствах проекта говорю: стартовать
с этой формы.
а КАК получить указатель на этот объект?
я в рамках топрика: ПОЧЕМУ не удается обратиться к свойству этой формы из другой? почему именно надо создавать явно экземпляр этого класса?
Нет, я понимаю, чт возможно так проще, но очень хоцца ПОНЯТЬ.
если есть объект, значит можно получить на него ссылку, вопрос КАК?
Max

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 01.08.2005 (Пн) 11:06

Народ! Я чей то вас не понимаю... никакой разницы между классом и объектом не видите что ли?

kroskros

1. Из какого места кода ты хочешь получить указатель (ссылку) на объект стартовой формы?
2. Из любого объекта (в том числе из формы) можно обратиться к любому открытому члену другого объекта если этот объект виден вызывающим объектом
3. Ссылка на объект:

ref = obj

и это всё. Здесь ref - ссылка, obj - уже существующий объект.
Весь мир матрица, а мы в нем потоки байтов!

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 02.08.2005 (Вт) 7:23

!Viper! писал(а):Народ! Я чей то вас не понимаю... никакой разницы между классом и объектом не видите что ли?

Да вижу я разницу, вернее - знаю...

Наверно просто некорректно задал вопрос.
Когда создаешь форму в дизайнере, то в коде так и пишется
Код: Выделить всё
Public Class frmFirst

это обявляется КЛАСС. :D
Чтобы приложение работало надо создать объект этого класса.
Если задать в параметрах проекта- Стартовать с этой формы,
то вручную создавать экземпляр этого класса не надо,
НО, как я верю, это НЕ ЗНАЧИТ, что он не создается,
просто /наверное/ генерится компиллятором.
Вот мне и интересно, если он и вправду создается компиллятором,
то както можно к нему обратиться в коде?
Max

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 02.08.2005 (Вт) 8:34

млин! а подумать? или ME уже отменили?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 02.08.2005 (Вт) 8:58

кхм... ME в обращении к форме1 из формы2 не очень помогает... :x
напоминаю ситуацию:
Проект стартует с ФОРМЫ1, по нажатию в ней кнопки
открываем ФОРМУ2. Бегунком в форме 2 хотим менять прозрачность ФОРМЫ1. не выходит.
создание в форме1 метода
Код: Выделить всё
Public sub ChOpac (byval opac as double)
me.opacity = opac
end sub

не проходит /у меня во всяком случае/
Max

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 02.08.2005 (Вт) 9:56

Подумать ещё...

-Глобалная переменная
-событие при создание формы
- и опятьже МЕ

Мне кажется это вопрос уже не программирования, а умения мыслить логически...
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 02.08.2005 (Вт) 10:06

гы... так как раз от глобальной переменной я и уходил как раз,
типа "дурной тон" :D
Да не... КАК выкрутится я знаю. Интересна была ТЕОРИЯ.
СПАСИБО! :)
Max

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 02.08.2005 (Вт) 10:23

ну по ПРАВИЛЬНОМУ, тогда MainWindow
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 02.08.2005 (Вт) 10:58

Еще вариант:

при создании Form2 передавать ей ссылку на Form1
Весь мир матрица, а мы в нем потоки байтов!

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 02.08.2005 (Вт) 12:44

Sebas писал(а):ну по ПРАВИЛЬНОМУ, тогда MainWindow

О!!!
именно ТО, что я хотел узнать... спасиба! )))
Max


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList