2012-10-02 26 views
0

在離開時(不關閉 - 將焦點設置到另一個表單)非模態形式時,顯示保存確認信息的最佳方式是什麼?C#在離開表單時保存確認信息

用戶有

  • 肯定的
  • 沒有的選項(保存更改並設置焦點targetform)(回滾和焦點設置到目標表單)
  • 取消(留在活性形式 - 取消將焦點設置爲目標窗體)

我無法找到解決方案來防止將焦點設置爲其他窗體。與關閉事件類似,我可以使用FormClosingEventArgs.Cancel屬性。

在我的情況下,使用模態形式是不可接受的。

在此先感謝

+4

您找到或嘗試了哪些方法?或者什麼沒有解決你最初嘗試使用的解決方案? –

+1

@ O.R.Mapper的評論的翻譯是「請閱讀Stack Overflow中使用的一些約定嗎?」 :) –

+0

主要問題:我找不到解決方案來防止將焦點設置爲另一種形式。 – donhauro

回答

0

首先,你可以使用Deactivated事件,當窗體失去焦點檢測。然後,如果用戶想要停留在失去焦點的表單中,則可以調用BringToFront方法將表單重新設置爲活動狀態。

您無法阻止用戶激活其他表單,但您可以嘗試(使用上述)將激活更改回當前表單。

+0

非常感謝。有用。如果我在Deactivated Event中顯示一個消息框,問題仍然存在。因此MessageBox接收焦點。確認對話框後,焦點被設置爲活動形式而不是原始目標形式。我想我必須在MessageBox.Show()方法中使用IWinOwner參數,但我不知道如何獲取目標窗體。 – donhauro

0

最好的辦法是重寫OnLostFocus事件。代碼如下:

protected override void OnLostFocus(EventArgs e) { 
    base.OnLostFocus(e); 
    this.Focus(); 
}