TopMost 和 visual studio 之間的小秘密


TopMost 相信很多人都用過,msdn的解釋如下:

637577BE8305406184FEDB6F0275F0C5

 

如果你設置了Form的TopMost為true的話,那么窗體就會被顯示為最底層窗體.

 

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.TopMost = true;
    }
}

 

這個form很簡單,在Load的時候將自己的TopMost 設置為true。

如果你直接運行程序的話,沒有任何問題,可是如果你要調試的話!!!

 

為了突出,我在Form上添加了一個按鈕,然后注冊了Click 事件.

 

下面是調試后的截圖:

09B8D090ADB644C3837BF7558FF514EB

 

你發現了問題了嗎?

斷點在button1_Click 里面執行了,可是由於Form的TopMost屬性,所以你無法看到代碼的執行,而且更糟糕的是由於Form 正在被調試,所以Form1的狀態是未響應,這意味着你無法拖動Form1,無法縮小Form1,Form1 目前不響應任何windows消息。

48EFB57B18E746EB870186CA0F9367B3

 

如果你的Form不僅設置了TopMost 為true,並且狀態是最大化。那么悲劇了,調試幾乎不可能。

 

那么VS為什么不在調試的時候將要調試的Form的TopMost設置為False,然后在調試結束后設置為true?

我認為微軟肯定是認為自己的程序(VS)不應該改變被調試程序的任何屬性。

 

這個問題的解決方法很簡單: 條件編譯

private void Form1_Load(object sender, EventArgs e)
{
    this.WindowState = FormWindowState.Maximized;

    #if !DEBUG
    this.TopMost = true;
    #endif
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM