2011-01-08 74 views
1

我喜歡MsgBox如何停止所有進一步處理,直到它被點擊,但我不喜歡它如何在屏幕中間彈出那個小小的msgbox。

有沒有辦法像msgbox一樣的東西,但將它保留在我的窗體(它總是在視圖中),所以我可以繼續並單擊窗體上的一個按鈕,而不必將小小的msgbox窗口放在窗體上可能會覆蓋它。在窗體應用程序中,是否有任何替代MsgBox?

我使用msgbox通知我發生了某些情況,我手動修復並完成後單擊MsgBox繼續處理。在表單上放置這個按鈕非常好。

+1

我真的不明白你在問什麼。如果您將表單設置爲消息框的所有者,它將顯示在表單頂部。沒有理由將它隱藏在其他任何東西之後,否則你將不得不把它放在前面。我也不明白,如果您希望能夠在顯示消息框時與表單交互。當你說「點擊表單上的一個按鈕」時,你是什麼意思? – 2011-01-08 07:48:15

+0

@Cody - 我爲你的評論的第一部分編輯了一些問題! – GuruC 2011-01-08 18:39:15

回答

3

然後我已帶來正面是否有覆蓋它

不應該發生的一個窗口,但如果你在你的程序中的線程顯示消息框可能發生。該窗口將桌面作爲父項,並且與用戶界面中的窗口沒有Z順序關係。是的,可以輕鬆地消失在另一個應用程序的窗口後面,包括您自己的窗口。

有一個MessageBoxOptions選項沒有公開在Winforms MB_TOPMOST中,它確保窗口是最頂層的。你會這樣使用它:

  MessageBox.Show("text", "caption", MessageBoxButtons.OK, 
       MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, 
       (MessageBoxOptions)0x40000); // use MB_TOPMOST 

但是到目前爲止,最好的方法是在UI線程上顯示消息框。使用Control.Invoke()來執行此操作。這樣,應用程序的其他窗口被禁用,用戶無法注意到該框。

仍然存在一個問題,用戶不會期望該盒子顯示出來,因爲它顯示爲與她所做的任何事情不同步。這意味着當用戶碰巧按下Enter或Space鍵時,該盒子很容易被意外解僱。或者點擊錯誤的地方。對此你無能爲力。

在您的主窗口中居中放置盒子在技術上是可行的,但很難做到。檢查this answer

1

你的意思是表單應該用一個消息加上一個OK按鈕來交換它的內容嗎?

這與文本模式界面通常的工作方式類似。

你可以通過添加一個禁用的面板或用戶控件的消息和按鈕的最上面的窗體,並啓用它,當你想提醒用戶。然而,我很困惑如何實現類似於MessageBox.Show()和Dialog.Show()的阻塞行爲。

相關問題