2012-11-16 48 views
-1

固定使用user32.dll中USER32的ShowWindow .NET

public partial class Form1 : Form 
{ 
    TheForm theForm;//empty form 
    public Form1() 
    { 
     InitializeComponent(); 
     theForm = new TheForm(); 
    } 

    internal const int SWP_SHOWWINDOW = 0x0040; 

    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    internal static extern int ShowWindow(IntPtr hWnd, short cmdShow);   

    private void button1_Click(object sender, EventArgs e)//shows theForm when it wants to 
    { 
     ShowWindow(theForm.Handle, SWP_SHOWWINDOW); 
    } 

    private void button2_Click(object sender, EventArgs e)//shows theForm always 
    { 
     theForm.Show(); 
    } 
} 

爲什麼叫USER32的ShowWindow後,大部分時間窗口 「停留在地獄」 第三方控件? 它捕獲焦點丟失和丟棄,但不捕獲鼠標事件,也不會自行繪製。

+1

你想要做什麼在上帝的綠色地球上? – siride

+0

試圖修復第三方組件... –

回答

1

我沒有專家,但我認爲你需要通過調用按鈕點擊事件處理程序方法之外的Show()方法來顯示你的窗體。如果沒有形式看到,你不能點擊一個按鈕來顯示錶單。

我不確定這是在C#中使用user32.dll來製作winforms應用程序的原因。因爲這是C#爲你完成的,所以在說話的方面。

所有您需要做的就是讓visual studio在拖放表單設計器中爲您創建表單代碼。然後爲了顯示和使用你的表單而不用爲你的Main()方法創建一個新的源文件,只需在生成的代碼中寫入Main()方法。

這裏有一篇關於使用windows窗體設計器的文章。

http://msdn.microsoft.com/en-us/library/360kwx3z(v=vs.90).aspx

+0

原因是我試圖修復第三方控件,並且誠實地不知道爲什麼他們這樣做。 –

+0

根據試圖做什麼以及他們需要做什麼,如果你能說服他們放棄dll,那麼每個人都會更容易。那麼你可以工作一些魔法,並與winforms設計師有一些樂趣。它是一個雙贏的局面! :) – kbzombie

+0

我有它的全部來源,我們突然破碎的項目需要修復它。 我累了,並順便哭泣。 –