2008-10-13 143 views
2

我公司有寫在VB6的大型應用程序,由於歷史的原因,應用程序導航使用Enter鍵,而不是用Tab鍵在字段之間進行導航。我不知道VB6,但是我知道,如果它是一個EnterKey,他們當前將Form的KeyUp事件中的每個控件的焦點放在一個大的select語句中。現在我們開始轉換爲.NET,並且必須保持一致,以便用戶不必在某些表單上進行製表符和在其他表單上進行回車。我想寫祖先的形式,將自動從字段到字段而不是Tab鍵。一位同事告訴我,在VB6中完成的方式是處理不在CLICK事件上的按鈕,而是在KEYUP事件上處理按鈕。我需要繼續這樣做,這樣我的表單完成後就不會有剩餘的KeyUp事件傳回VB6。用於按鈕的事件的順序是如何使用回車鍵

  1. button_PreviewKeyDown
  2. button_Click(顯然替換所述按鍵事件)
  3. form_KeyUp
  4. button_KeyUp

我創建的表格如下所示:

  • 在ANCESTOR窗體的KeyUp事件上,c hecks看看它是否是一個輸入鍵。如果它是一個回車鍵,並且活動控件不是按鈕,它將按標籤順序移動到下一個字段。否則,它會忽略該鍵並讓控件處理它。如果它是一個按鈕,祖先不會知道按鈕想要控制的位置,因爲它取決於按鈕在「單擊」時想要執行的操作。
  • 在子窗體的按鈕,單擊事件不執行任何操作,並處理在KeyUp事件和鼠標點擊事件重複。
  • ANCESTOR表單具有一個受保護的布爾值EatKeyUp,該值可以由CHILD設置爲True。這在子表單需要發送MessageBox時使用,因爲如果用戶通過MessageBox上的OK按鈕進入,仍然存在剩餘的KeyUp事件,該事件將由祖先表單使用。

雖然klugey,其實這似乎工作。我想知道的是,有沒有更好的方法?也許有些設置的地方,我可以告訴我的應用程序「通過表單輸入而不是Tab鍵」?我正在使用的事件而不是點擊事件是最好的事件嗎?

回答

1

更好的實現是使用Form的AcceptButton屬性,將其設置爲窗體上某個隱藏按鈕。然後當用戶按下輸入按鈕被點擊時,然後在按鈕的點擊事件中,你執行代碼移動到下一個控件。要選擇下一個控件,您只需選擇項目列表即可。

做到這一點的最簡單的方法是創建一個基本形式,然後內這具有按鈕和的AcceptButton邏輯。

+1

我沒有試過這個,因爲我不再在那個工作(浩浩!)。但它看起來很合理 - 謝謝! – CindyH 2010-12-03 05:06:32

2

也許現在要轉換的時間推秉承窗口標準的想法。

在直接回答你的問題,上述機制就是做這個一個很常見的方式,另一種方式來做到這一點是設置窗體的關鍵預覽性質和形式直接處理它。這兩種方法都不是特別好的解決方案,因爲窗口導航根本就不是這樣做的,

+0

我知道,窗口導航並不意味着要這樣做。男孩,我知道。但是,我們無法使用製表符瀏覽數百個屏幕,其餘的則使用輸入法進行導航。將所有其他標籤轉換爲標籤,然後返回並轉換爲.NET並不明智。 – CindyH 2008-10-13 15:09:56