Как из Sub сделать Prozeduren?

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

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

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Как из Sub сделать Prozeduren?

Сообщение Novichok$ » 07.11.2005 (Пн) 16:31

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

А как сделать так, что бы после старта программы все происходило автомвтически дальше.

Можно (как мне кажется) весь код впихнуть между :
Private Sub Form1_Load... и End Sub

Но сдается мне, что это не самое элегантное решение.
А как сделать это через Function?
Как будет выглядеть такой кусок кода с Prozedur

Код: Выделить всё
Private Sub btnСonnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerbinden.Click

        Shell("rasdial ConnectName user password")
       
    End Sub

Private Sub btnСonnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerbinden.Click

          Shell("rasdial /DISCONNECT")
       
    End Sub

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 07.11.2005 (Пн) 16:33

"А как сделать это через Function? "
имелось в виду Prozedur

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 07.11.2005 (Пн) 23:42

Ээээ, я ничего не понял. Поясните.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 08.11.2005 (Вт) 11:59

:lol: ржунимагу, аффтар пиши исчо :)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 08.11.2005 (Вт) 12:07

А тебе 10 кнопок нужны или ты их просто используешь для выполнения отдельных действий?

Вообще, делай sub main стартом и 10 public sub для этих 10 методов в классе или форме и вызывай их наздоровье.

P.S. sub и procedure - это одно и то же ;)
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.11.2005 (Вт) 12:36

Rainbow писал(а):P.S. sub и procedure - это одно и то же ;)

А Prozeduren? :-D
Изображение

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 08.11.2005 (Вт) 13:24

:D

Novichok$ писал(а):имелось в виду Prozedur

prozedur (нем) = procedure (pascal, delphi) = sub (VB) ИМХО ;)
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 08.11.2005 (Вт) 16:39

Да, я скопировал Слово процедуры из «помощи» и, не убрав окончание, вставил его в текст. Чем вызвал невообразимый смех в зале : ))))

Prozeduren – множественное число от Prozedur на немецком.

Rainbow писал(а):А тебе 10 кнопок нужны или ты их просто используешь для выполнения отдельных действий?

Вообще, делай sub main стартом и 10 public sub для этих 10 методов в классе или форме и вызывай их наздоровье.



Просто программа должна иметь две возможности реализации, пошагово и автоматически. Во втором варианте кнопки, Конечно не нужны.


Как это с кнопками реализовано– я понимаю
Private Sub Button1_Click ...

А без кнопок – не пойму, знаний маловато.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 08.11.2005 (Вт) 17:42

Посмеяться - это мы любим.

Давай попробую объяснить, что бы я делала по шагам:
1) Твое приложения сейчас стартует прямо с формы, которая была у тебя первой в проекте (я так думаю). Вообще, приложению можно указать, какая форма будет первой или приложение может стартовать с sub main. Поскольку твое приложение должно поддерживать 2 режима, разумно стартовать с sub Main и там решать, показывать форму или делать что-то другое.
Добавь в проект модуль (.bas) и напиши там
Код: Выделить всё
Public Sub main()
    msgbox "started"
End Sub

2) Project -> Properties -> General tab -> Startup object = Sub Main

получилось увидеть сообщение?
Тогда попробуй запустить свою форму оттуда
Код: Выделить всё
Public Sub main()
    MyForm.Show vbModal
End Sub


3) Теперь про автоматический режим. Допустим, мы каким-то образом выяснили, что надо запускать автоматически.
Самый простой на мой взгляд способ (да простят меня гурманы) - это во всех обработчиках "Private Sub Button1_Click " заменить слово "Private" на "Public".

Тогда в случае автоматического режима будет что-то такое:
Public Sub main()
Dim frm As MyForm
Set frm = New MyForm

frm.Button1_Click
frm.Button2_Click
frm.Button3_Click
End Sub

По поводу того, как понять, в каком режиме запускать - я думаю, надо анализировать командную строку...

Теперь несколько замечаний, что тут сделано неправильно:
1) обработчики обычно не делают public. Public делают методы, которые могут быть вызваны из обработчиков
2) Кнопки обычно называют как-нибудь понятно себе и другим читателям кода.
3) возможно, стоило бы написать отдельный класс, который использовала бы MyForm и SubMain.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 08.11.2005 (Вт) 17:57

О как меня приплющило-то! Код на VB6 написала.

Новичок, ты там Set только убери. - а так, вроде, то же самое должно быть... :)
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 11:09

А если сделать так, что бы программа стартовала тольок автоматически.

Я допустим сделал так.

Между
Код: Выделить всё
Public Class Form1
    Inherits System.Windows.Forms.Form
    Private aaa As ABC
Private Sub Form1_Load....

и
Код: Выделить всё
End Sub
End Class


Я впихнул весь мой код, убрав предварительно в каждом шаге
Код: Выделить всё
Private Sub Button1_Click...
и
End Sub


Работает,но логика варварская . Все в куче. Это не есть хорошо. я понимаю где то подспудно, что можно сохранить структуру кода. Все ведь уже было разбито раньше на маленькие подпрограммки

С твоих слов (девушка-радуга) я должен поменять Private на Public .

А как быть тогда с
Код: Выделить всё
Public Sub Form1_Load

Если я оставлю это и потом начну писать
Код: Выделить всё
Public Sub main()

то получу наверняка "! Sub внутри Sub(а)

Аж покраснел от незнания основ (стыдно, а спросить рядом некого)
Уж простите темного

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 09.11.2005 (Ср) 14:54

Не, погоди, все не так!

1) На своем проекте кликаешь мышкой правой кнопкой: Add->Addd Module
2) Там пишешь:
Код: Выделить всё
    Public Sub main()
        MsgBox("eee")
    End Sub

Таким образом, в этом модуле у тебя получается:
Код: Выделить всё
Module MyModule
    Public Sub main()
        MsgBox("eee")
    End Sub
End Module


Теперь делаешь стартовым sub Main:
На проекте правой кнопкой -> Properties -> Startup Object - выбрать sub main.

Если все сделал правильно, то при запуске приложения увидишь сообщение еее.

Получилось?
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 16:01

все сделал, только вот это не выходит:
"Теперь делаешь стартовым sub Main: "

в проектэксплоере правой кнопкой На проекте-> установить как стартовый, кликаю ... и ничего не происходит.

как выбрать sub main? или я уже кудато нитуда полез?

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 09.11.2005 (Ср) 16:11

"в проектэксплоере правой кнопкой На проекте->" свойства -> стартовый объект (StartUp object) = Sub Main

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 16:21

извиняюсь,все получилось

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 09.11.2005 (Ср) 16:50

Так, теперь такой эксперимент:
Код: Выделить всё
    Public Sub main()
        Dim frm As New MyForm
        frm.ShowDialog()
    End Sub


В результате должна запуститься форма. Это твой неавтоматический режим. MyForm - это _моя_ форма. Вместо MyForm подставь свою с 10ю кнопками.

Ага?

Твой автоматический режим будет выглядеть примерно так:
Код: Выделить всё
    Public Sub main()
        Dim frm As New MyForm

        frm.Button1_Click()
        frm.Button2_Click()
        frm.Button3_Click()
    End Sub

Это будет работать при условие, что все обработчики Button1_Click и т.д. были объявлены как Public.
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 17:11

2 вопроса

1. в каком месте кода это вставлять

Код: Выделить всё
Public Sub main()
        Dim frm As New MyForm

        frm.Button1_Click()
        frm.Button2_Click()
        frm.Button3_Click()
    End Sub


Я вставил в конце перед End Class

Если правильно вставил, тогда второй вопрос:

При попытке написать:
frm. btnConnect _Click()
ошибка

Для Parameter "e" от "Public Sub btnConnect_Click(sender As Object, e As System.EventArgs)" не был введен аргумент.

А так выглядит этот саб:
Код: Выделить всё
Public Sub btnConnect _Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 09.11.2005 (Ср) 17:47

1) Вставить надо было в модуле, там где раньше было
Public Sub main()
MsgBox("eee")
End Sub
Пойми, мы просто модифицируем код, приближаясь к тому, что тебе надо на самом деле.

2) По поводу "не был введен аргумент". Это я лопухнулась. Видишь ли, обработчик хочет знать дополнительные параб=метры, которые ему не передали.

Проще сделать поправильному:
Код: Выделить всё
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
    Connect 'это вызов процедуры, которая описана ниже
End Sub
Public Sub Connect()
    'здесь ты делаешь все то, что раньше делал внутри btnConnect_Click
End Sub

И так для всех.

Sub Main будет выглядеть теперь так:
Код: Выделить всё
Public Sub main()
        Dim frm As New MyForm

        frm.Connect()
        frm.DoSomething1()
        frm.DoSomething2()
End Sub
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 09.11.2005 (Ср) 18:15

спасибо, все работает

Помогла бы ты мне еще с этим прокрятым таймером, я бы тебе наверное ПАМЯТНИК поставил.

Надпись для памятника уже есть : )))


Dû bist mîn, ich bin dîn.
des solt dû gewis sîn.
dû bist beslozzen
in mînem herzen;
verlorn ist das sluzzelîn:
dû muost ouch immer darinne sîn.

Ты ведь смогла перевести с немецкого такое сложное слово как "Prozedurуen" : )))

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 09.11.2005 (Ср) 18:44

Ну, хм... Тут ты меня передоценил. Я немецкого не знаю, но общий смысл понятен :)

Помогла бы ты мне еще с этим прокрятым таймером, я бы тебе наверное ПАМЯТНИК поставил.

Так ты пиши вопросы в ту тему. Чем смогу - помогу, если дела не оторвут. Или ты хочешь, чтобы я за тебя написала? Этого у меня точно не получится.

Общий смысл (еще раз) такой:
У тебя в программе (например, в модуле) объявляешь
Public g_timer as Timer

Эта переменная будет доступна отовсюду. Заставляешь таймер тикать каждые "сколько тебе там нужно".
По реакции на тик (аналогично тому, как ты обрабатываешь нажатие кнопки), ты смотришь, какая сейчас дата, время и решаешь, надо тебе делать какие-то действия или нет. Вот и все.

Ты по английски-то хоть читаешь?
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)


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

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

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

    TopList  
cron