鄉親前形式,如何顯示在C#
請沒有人知道如何從一個不可見的應用程序,和有它獲得焦點(即出現在其他窗口的頂部)顯示的形式?我正在使用C#.NET 3.5。
我懷疑我已經採取了 「完全錯誤的做法」 ......我不Application.Run(新TheForm())代替我(新TheForm())。的ShowModal()。 ..表單基本上是一種模態對話,帶有幾個複選框;一個文本框,以及確定和取消按鈕。用戶勾選複選框並在描述中鍵入(或其他),然後按下OK,表單消失,並且該過程從窗體讀取用戶輸入,處理它並繼續處理。
這是有效的,除非表單顯示它沒有得到焦點,而是出現在「主機」應用程序後面,直到您在任務欄(或其他任何地方)單擊它。這是一個令人討厭的行爲,我預測這會導致很多「支持呼叫」,而現有的VB6版本沒有這個問題,所以我在可用性方面倒退......並且用戶不會接受(和也不應該)。
因此......我開始認爲我需要重新考慮整個社會......我應該先把表單作爲一個「正常應用」來展示,然後將處理的剩餘人員附加到OK按鈕上點擊事件。它應該有效,但這需要時間,我沒有(我已經超過時間/預算)...所以首先,我真的需要嘗試使目前的方法工作...即使是快速和 - 髒方法。
那麼請有人知道如何「強制」一個.NET 3.5窗體(通過公平的手段或家禽)來獲得焦點?我在想「神奇」的Windows API調用(我知道
暮光區:這似乎只是工作中的一個問題,我們正在使用Windows XP SP3上的Visual Studio 2008 ... I我只是未能在Vista Ulrich的Visual C#2008上在家中使用SSCCE(見下文)重現此問題...此工作正常。當我運行EXE的時候,但是沒有直接從IDE(我剛剛忍受的時候)(或者Ctrl-F5'ed)......在家裏,這個表單顯示的很好,不管怎樣,總是令人尷尬的!
它可能也可能不相關,但Visual Studi當項目在調試模式下運行並且在「即時」編輯代碼時,它在今天早上崩潰並燒燬了......它被卡住了,我認爲這是無盡的錯誤信息循環。錯誤消息是關於「無法調試這個項目,因爲它不是當前的項目,或者什麼......所以我只是用進程管理器把它關閉了,它再次啓動,甚至提出恢復」失去「文件,我接受了報價
using System;
using System.Windows.Forms;
namespace ShowFormOnTop {
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
Form1 frm = new Form1();
frm.ShowDialog();
}
}
}
背景:我移植現有的VB6實現到.NET ......這是一個‘插件’的‘叫MapInfo客戶端’GIS應用的。現有的客戶端「無形地工作」,我的指令是「使新版本儘可能接近舊版本」,它運行良好(經過多年修補);它只是用不支持的語言編寫的,所以我們需要端口它
關於我:雖然我有一個底部擦拭證書,但我一直都是C#和.NET的noob,我已經是一個專業程序員10年了;所以我有點「知道一些東西」。
任何見解都會受到歡迎...並感謝大家花時間閱讀這些內容。 Consiseness不是(顯然)我的特長。
乾杯。基思。
我會去給它一個節。謝謝你的建議。我很欣賞它。 – corlettk 2009-06-12 23:26:09
只需在Form_Load中設置
this.TopMost = true
就像魅力一樣。謝謝你,謝謝你,謝謝! – corlettk 2009-06-13 01:27:37我有一個類似的問題,並嘗試在Load事件中使用this.Focus()和this.Activate(),但沒有成功,但在Load事件中設置this.TopMost = true完全適合我!偉大的職位,並感謝一百萬的答案。 +1 – Jim 2012-05-15 16:05:39