Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Собственное MsgBox Добавлено: 21.03.04 10:54  

Автор вопроса:  S.W.I.F.T.

Решил создать свое MsgBox, но возник вопрос. Мой MsgBox - отдельная форма
с кнопками и надписями. По процедуре я настраиваю кнопки, размеры и
т.д. Отображаю форму. Но, как получить ответ в процедуру на вопрос "Какая кнопка
была нажата?"
Либо, если есть такие предметы подскажите где взять (ведь не думаю что
только мне приходила в голову такая идея). Спасибо!

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 21.03.04 11:02

А ты отображаи форму не по процедуре, а по функций

При нажатий на одну из кнопок присваиваи переменнои определенное значение и возвращаи его из функций

 

Понял или нет?     

Ответить

Номер ответа: 2
Автор ответа:
 S.W.I.F.T.



Вопросов: 8
Ответов: 6
 Профиль | | #2 Добавлено: 21.03.04 13:05

Я именно так и хочу сделать, но я не сталкивался с такими вещами и не знаю как правильно заблокировать выполнение программы на время отображения формы "MessageBox" и вернуть переменную в процедуру.

У меня:

1. Запрос в процедуру на отображения формы "MessageBox" с кнопками "Да" и "Нет" и текстом "Выйти?"

2. Процедура настраивает форму "MessageBox" с нужными параметрами и отображает ее.

3. И вот тут продолжает выполняться следующий за процедурой оператор. Т.е. процедура не ждет даже, пока я кнопку нажму на форме "MessageBox"

Какие будут предложения? Зараннее благодарен.

Ответить

Номер ответа: 3
Автор ответа:
 2San



Вопросов: 11
Ответов: 68
 Профиль | | #3 Добавлено: 21.03.04 13:14
Показывай свою форму (мессаджбокс которая) так: Form1.Show 1, frmMainForm
При этом она станет модальной по отношению к frmMainForm и пока ты ее не
закроеш делать ничего в frmMainForm не сможеш

Сан Саныч
mailto:apexsun@narod.ru -=•=- http://apexsun.narod.ru -=•=- ICQ:273825121

> Origin: Полковники не бегают, так как в мирное время это вызывает смех, а в военное - панику.

Ответить

Номер ответа: 4
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 21.03.04 14:10

В свою процедуру - Do: DoEvents: Call Sleep(10&): Loop, и проверяй переменную, по нажатию на кнопку, изменяй эту переменную на индекс (номер) кнопки и передавай в качестве возвращаемого значения функции, возможно и мною предложеный способ не будет работать, но то что предложил 2San, работать не будет точно, видимо он не понял сути вопроса...

Ответить

Номер ответа: 5
Автор ответа:
 S.W.I.F.T.



Вопросов: 8
Ответов: 6
 Профиль | | #5 Добавлено: 21.03.04 14:20
Да, наверное, прийдется воспользоваться этим вариантом, хотя очень
нелюблю такие вечные циклы использовать. Ладно, спасибо Sne!

Ответить

Номер ответа: 6
Автор ответа:
 2San



Вопросов: 11
Ответов: 68
 Профиль | | #6 Добавлено: 21.03.04 14:32
>> возможно и мною предложеный способ не будет работать, но то что предложил 2San, работать не будет точно, видимо он не понял сути вопроса...

Может твой способ и будет работать, но проц при этом будет делать "дурную
работу" (чит. ни кому не нужную).
Короче, расписываю чего я имел ввиду:

'на уровне модуля пишешь:

Public cmdRet As Long

Public Function MyMsgBox(.... parameters ....)

cmdRet = 0
frmMsgBox.Show 1, frmMainForm
MyMsgBox = cmdRet

End Function

'в форме frmMsgBox пишешь:

Private Sub cmd_Click(Index As Integer)

cmdRet = Index
Unload Me

End Sub

'на форме (Yes, No, Cancel etc.) - кнопки (массив кнопок) с именами "cmd" и соотв. индексами.

Ответить

Номер ответа: 7
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 21.03.04 15:10

2 2San: Вот так, возможно, будет, видимо я немножко не понял что ты имел в виду... Приношу извинения :)

А вот на счет цикла бесконечного, ты не прав! Если был бы ты более внимателен, то заметил функцию Sleep(10&). Это по любому не будет загружать процессор.

А теперь на счет любви к бесконечным циклам:
Ты знаешь почему одна форма, без всякого кода остается на экране а не выгружается сама собой, при при завершении процедуры, как, например, Sub Main ?
Посмотри MSDN, например, функцию TranslateMessage, и глянь пример... Ну как теперь ты относишься к бесконечным циклам ???

Для тех у кого нет MSDN, а например глянуть хочется, описание уж сюда не стану кидать, но пример собственно вот:

HWND hwndMain; 
HWND hwndDlgModeless = NULL;
MSG msg;
BOOL bRet;
HACCEL haccel;
//
// Perform initialization and create a main window.
//

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
if (hwndDlgModeless == (HWND) NULL ||
!IsDialogMessage(hwndDlgModeless, &msg) &&
!TranslateAccelerator(hwndMain, haccel,
&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}

Ответить

Номер ответа: 8
Автор ответа:
 2San



Вопросов: 11
Ответов: 68
 Профиль | | #8 Добавлено: 21.03.04 16:22
> Ну как теперь ты относишься к бесконечным циклам ???

Так же, как и раньше - лучше когда без них ;)

Ответить

Номер ответа: 9
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 21.03.04 22:44

Зря... все-ж на них, родимых, висит :)

Ответить

Номер ответа: 10
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #10 Добавлено: 22.03.04 09:57

Висит то на них, но лишний создавать все равно не стоит. Тем более на VB :))

Для сего существуют модальные окна. Способов передать индекс нажатой клавиши от модальной к основной форме множество, но я всегда старался вынести в модальную форму и те процедуры, которые по нажатии выполняются. Затем - unload me...

Ответить

Страница: 1 |

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



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