2009-12-09 138 views
1

我在我的應用程序中有一個Winforms DataGridView。當用戶選擇一行並點擊輸入時,我會加載一個新的表單,其中包含與該行相關的詳細信息。獲取數據並顯示屏幕需要大約一秒的時間。一些用戶非常快,他們開始輸入與表單相關的擊鍵,例如Pg Down/Pg Up,甚至在加載之前,並抱怨網格向下滾動,而不是在加載的表單上看到預期的效果。延遲或短暫暫停Windows消息

我需要一種方法來暫停按鍵消息的處理,直到表單被加載。任何想法高度讚賞。

+0

imho如果表單尚未顯示,用戶正在做pgup/down,那麼他們做錯了。如果用戶可以做到這一點錯了是一個不同的問題;) – RvdK 2009-12-09 15:45:31

回答

1

你可以捕捉WM_KEYDOWN消息,而忽略它,如果形式加載(也許是設置一個標誌),或者你可以發佈的消息當前正在加載的表單。

看一看IMessageFilter

+0

您能否詳細說明如何在加載後將其發佈到新表單中? – SKG 2009-12-09 15:45:24

0

您能否將啓用的屬性設置爲false,並在數據加載後返回true?

+0

我已經想到了這一點。如果我這樣做,會不會失去按鍵信息? – SKG 2009-12-09 15:41:13

+0

用戶仍然會抱怨說他們沒有看到加載表單中的預期操作 – SKG 2009-12-09 15:42:46

0

一個簡單的布爾檢查應該做的。

創建一個bool,將其命名爲'busy',並且當按下回車按鈕時,請將其檢查爲true。

if (!busy) 
{ 
busy = true; 
//do your thing 
} 

簡單地檢查它回false時再加載完成

1

不是一個解決方案,但不同的方法: 應怎麼做現在,當用戶選擇行並按下回車鍵?:

  1. 展會的形式和負荷數據
  2. 加載數據和顯示錶格

選項1最好與加載圖標/消息結合使用。如果您確實必須啓用擊鍵,然後在完成加載時捕獲它們並對其進行重新設定。新窗體將接收擊鍵,因爲它是最頂層的和活動的(如果正確完成)。

+0

在我目前的方法中,我首先綁定數據,然後使表單可見。我正在接受你提到的「捕獲他們並且重新燃燒」的方法。不知道如何去實施它。 – SKG 2009-12-09 16:03:05