2010-07-30 108 views
4

我有一個簡單的兩個窗體,一個包含一個網格和一個按鈕。當我點擊按鈕時,我的應用程序開始進行長時間的操作。雖然現在的工作,我表明,包含一個進度條 我打開它這樣一種形式:當窗口關閉時,我的應用程序失去焦點

_busyWindow.ShowDialog(); 

並確定

public partial class BusyWindow : DevExpress.XtraEditors.XtraForm 
{ 
    public BusyWindow() 
    { 
     InitializeComponent(); 
    } 

    private void BusyWindow_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     this.Hide(); 
     e.Cancel = true; // this cancels the close event. 
    } 
} 

當操作完成後,我躲在這樣

形式
if (ended) 
    _busyWindow.Hide(); 

它工作正常。問題是,當我關閉第二個表單(相同的結束代碼)時,它也關閉,但我的主GUI失去了焦點。例如,如果我在應用程序後面打開Firefox,那麼Firefox就會成爲焦點。

這隻發生在busyWindow打開時關閉第二個窗體,沒有窗體關閉時(即,如果我打開窗體,關閉它而不點擊按鈕,那麼主GUI不會不會失去焦點)。

你知道發生了什麼事或我可以在哪裏搜索?

回答

3

可能有兩種可能的解決方案,使您保持您的重點主窗口:

//編輯:主窗口中下面的例子是與網​​格和按鈕的窗口。

  1. 既然你是通過ShowDialog()試圖通過這個設置窗口的所有者顯示忙窗口:_busyWindow.ShowDialog(this);。我以前遇到類似的問題,這對我有用。既然你指定了busyWindow的所有者,當它關閉時,它會把焦點放回它的所有者,您的主窗口

  2. 如果上述技術不起作用(它應該,因爲它爲我工作),您可以嘗試將主窗口的引用傳遞給busyWindow,然後在其關閉設置的焦點主窗口。示例:

_busyWindow.MyMainWindow = this; //MyMainWindow references mainWindow of your app _busyWindow.ShowDialog();

而在busyWindow的的FormClosing如下:

private void BusyWindow_FormClosing(object sender, FormClosingEventArgs e)

{ 
    this.Hide(); 
    e.Cancel = true; // this cancels the close event. 
    MainWindow.Focus(); 
} 

看看它是否工作。第一個解決方案應該可行。

希望它有幫助。

謝謝&快樂開窗!

+0

謝謝!有效! – pedroruiz 2010-07-30 08:33:27

+0

好...只是爲了信息。第一個解決方案還是第二個?猜猜,這是第一個! – Vaibhav 2010-07-30 08:34:44

+0

我剛發現它並不總是工作:( 第一次沒有工作,第二次似乎工作,但有時它並沒有 – pedroruiz 2010-07-30 09:22:48

1

剛設置好孩子的窗戶Owner = null關閉之前

相關問題