2014-12-11 1 views
-3

Я много раз искал, как отображать Msgbox, который не будет ждать ввода пользователя (нажатие ok или отмена). Я нашел 3 solutiuons к этому.Отображение MsgBox() с nowait (без ввода пользователем) не является реальной проблемой

1- Отображение MsgBox() в другом потоке или с помощью BackgroundWorker()

2- Создать форму, которая отобразить сообщение, затем закрывают форму с помощью таймера и использовать его вместо MsgBox()

3- Использование API MessageBoxA()

Пусть у меня есть цикл от 1 до 100, и я хочу показать сообщение для I (счетчик)

Когда я проверяю выше 3 способа, я обнаружил, что это не правильный путь doi Я не нуждаюсь в msgbox(), чтобы закрыть его сам после показа сообщения, потому что это отобразит 100 диалоговых окон.

То, что я действительно хочу, это отобразить ТОЛЬКО 1 MsgBox() и соответствующим образом изменить текст.

мне удалось это сделать с помощью аа формы() в классе, и я сделал это с помощью Application.DoEvents

Я знаю, что это может быть сделано с помощью BackgroundWorker или Threading, так как много советов людей против использования Application.Doevents

Вот мой код

Dim oWW As New WaitWindow With {.TopLevel = True,.TopMost = True,.StartPosition = FormStartPosition.CenterScreen} 
oWW.Show(Me) 
For i = 1 to 100 
    Threading.Thread.Sleep(500) ' Just to slowdown execution 
    oWW.SetMessage("Counter = " + i.ToString) 
Next 
oWW.Dispose() 


Public Class WaitWindow 
    Sub SetMessage(ByVal Message As string) 
     lbl_message.Text = Message 
     Application.DoEvents 
    End Sub 
End Class 

WaitWindow не более чем форма базового класса с меткой (lbl_message)

Этот код работает отлично (дисплей WaitWindowForm по центру отображаемой формы только один раз, а затем изменить текст)

У меня есть 3 вопроса:

1- Как отобразить WaitWindowForm в правом верхнем углу моего рабочая форма?

2- Можно ли отобразить нормальный MsgBox() или MessageBox.Show() только один раз, затем захватить отображаемый текст и изменить его?

3- Какой из них подходит для моего выпуска (BackgroundWorker или Threading) и то, что код в классе WaitWindow я пост будет, если я решил использовать Backgroundworker или вкручивается вместо Application.DoEvents (Изменение текста метки не показывая новую форму с новый текст)?

3 вопроса в одном посте .. Хамм .. кто заботится, я не тот, кто будет отвечать лол :)

Спасибо заранее.

+3

Подвешено. Вместо этого я удалю вопрос. – LarsTech

+0

Как я задаю не относительные вопросы, чтобы заслужить -2 downvote? Должен ли я быть серьезным (lol) дает downvote? все это связано. не имеют взаимопонимания, чтобы получить помощь от таких больных людей. –

+0

Пусть администратор удалит его. Я закончил здесь –

ответ

0

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

Вы также можете искать диалоговые окна (поиск «.showdialog() vb.net» в google) также может помочь.

+0

http://www.codeproject.com/Articles/63507/A-Simple-Wait-Window Проверьте это, что странное существо, показывающее сообщение для пользователя, существует в VFP, и этот человек сделал это, но не так, как я хотел. Я хочу, чтобы это в vb.net использовало его всякий раз, когда я использовал форму в своем приложении, а не добавлял ее повсюду. –

+0

не добавляя текстовое поле в каждую форму, я хочу его использовать. –

+0

_I хочу, чтобы он в vb.net использовал его всякий раз, когда у меня была форма, которую я имел в моем приложении, насколько я вижу, это почти то, что делает проект из ссылки. Это форма, которую вы можете вызывать из любой формы или класса, который у вас есть в вашем приложении, и установить текст для любого, что вы хотите ... –

Смежные вопросы