2008-12-30 41 views
2

我在Borland C++ Builder 5中的對話框上的Escape鍵處理程序有一個相當複雜的問題。是否有任何其他要求的退出鍵來取消取消事件(以下列出的除外)?Borland C++ Builder 5 - 取消通過退出鍵不工作

  1. 「Cancel」按鈕(TBitBtn)的Cancel屬性設置爲true。
  2. 「取消」按鈕的默認屬性設置爲false。
  3. 「取消」按鈕將其modalResult設置爲mrCancel。

注: 我與至今仍在用Borland C++ Builder的5編制我們有一個單獨的項目來替代它的舊的遺留應用程序的工作 - 我只是在做維持生命的盡頭。

更新

四個月後,我終於停下抓我的頭......事實證明,該應用程序的父窗體有一個運行時OnShortCut處理函數定義。我只需要禁用Esc處理程序來處理子對話框。

+0

檢查形式事件處理程序 - OnCloseQuery,onKeyDown和可能的OnKeyPress所有街區。 – 2008-12-30 17:45:34

回答

4

您應該檢查所有可能的方式取消事件可能被阻止:

所有的
  1. 首先,檢查是否點擊取消按鈕關閉實際的形式。

  2. 然後檢查是否有其他按鈕的Cancel屬性設置爲true。

  3. 之後,檢查所有關鍵事件處理程序,不要忘記窗體的事件處理程序,尤其是如果您啓用了KeyPreview。

  4. 如果仍未找到問題,請檢查另一個組件是否將其ShortCut屬性設置爲處理轉義鍵。

  5. 此外,檢查是否有任何鍵盤鉤活動。

+0

1.是的,有作品。 2.都能跟得上 3.這種特殊形式沒有任何按鍵事件處理函數定義 感謝指針 – 2009-01-02 02:27:49

+0

注意:如果你定義一個定製的取消按鈕返回MrCancel,還必須取消屬性設置爲true。 – 2011-07-21 21:27:05

1

可能是表單的KeyPreview屬性設置爲true。 這是Escape鍵經常/可能已被禁用的地方。 KeyPreview屬性也經常啓用捕獲[返回]按鍵(即,OnKeyPress)以前進到下一個字段而不是關閉表單。

+0

明天當我回來工作時,我會檢查一下。謝謝。 – 2009-01-02 02:28:20

1

您也可以創建另一個對話框,在其中添加取消按鈕並查看退出鍵是否工作。然後比較兩種形式的DFM源並檢查設置中的差異。

1

是否有一個「CanClose」類型的事件,邏輯阻止它關閉?

1

還要記住,該對話框需要通過ShowModal()而不是Show()調用。例如,如果您的表單被命名爲「FAskDialog」,那麼顯示它的代碼應該類似於

FAskDialog-> ShowModal();

而非

FAskDialog->顯示();

如果通過Show()調用對話框,那麼點擊取消鍵或設置ModalResult = mrCancel將不會導致對話框關閉。

1

這是一個老問題,我可以給答案:

您需要設置的KeyPreview = true,然後編寫代碼來捕獲ESC鍵:

Form1中::的onkeyup(...)
(Key == 27){
Close();如果(Key == 27){
Close();
}
}