2010-12-20 178 views
0

全部,TabControl.SelectedIndex被更改,但SelectedIndexChanged甚至沒有觸發

我在開始行爲奇怪的應用程序中有一個TabControl。一些背景...

該程序已從VB6轉換爲VB .NET 2008,並用於使用其類名稱來引用表單。換句話說,我可能有一個名爲frmFoo的表單類。在該程序的代碼,你可能會看到:

frmFoo.Show() 

frmFoo.UserDefinedProperty = True 

在最近的一些變化,我創建的變量來表示我的形式實例就像這些:

Public MyForm as frmFoo 

MyForm = New frmFoo 
MyForm.Show() 

在這樣做的時候,我也從表單的Load事件處理程序中刪除了代碼,並將它放在窗體的構造函數中。

當窗體加載時,或者當文檔被加載並且應該影響TabControl的選定索引時,類似下面的內容不一定會激發SelectedIndexChanged事件。

MyForm.tbsForm.SelectedIndex = ValueReadFromFile 

......或者......

MyForm.tbsForm.Tabs(ValueReadFromFile).Select 

很抱歉說得這麼羅嗦,但還有更多。如果我打開表單並查看TabControl以確認它已正確設置,那麼所有內容都可以像預期的那樣工作。行爲不當的TabControl包含在另一個TabControl中,所以我必須單擊父級TabControl才能看到它。如果我能看到它,並進行測試,測試總是有效的。如果我看不到它,並進行測試,那麼我運行的第一個測試將不會觸發該事件。 ...傳呼海森堡博士...

這幾乎就好像控制必須通過改變值或使其在屏幕上可見第一次初始化...我完全失去了這一個。這是我見過的最不尋常的行爲。在我開始使用變量來表示窗體並將Load事件代碼放入窗體構造函數之前,所有工作都完美無缺。

任何人都可以幫助,或至少讓我擺脫我的苦難嗎? SH

-------------------------------------------- ------------------編輯#2
我只是在試圖消除行爲中的一些變化之後進行了測試。但我想確認之前所說的行爲。

我打開程序並讀取文件。該文件包含一個應該觸發事件處理程序的值。在不使控件可見的情況下,我可以在不觸發事件的情況下更改Tab控件的SelectedIndex屬性。

我再次關閉程序,並重新打開它。這一次,選擇允許子標籤(我所關注事件的標籤)變爲可見的父標籤。然後我在父控件中選擇了一個不同的選項卡,這意味着子控件不再可見。當我像以前一樣打開同一個文件時,它解僱了這個事件。

我很想實現一個標誌,確認控件已被重新繪製或者是否顯示父標籤。如果標誌沒有設置,我可能不得不在代碼中觸發事件。

我想重申,一切工作時,方案中提及的形式通過其類名和多對窗體控件的安排是在​​負載情況下完成的。現在程序創建變量,控件的排列在窗體的構造函數中完成。我確信這與我遇到的問題有關,但我無法理解。有什麼智慧可以分享?

回答

0
MyForm.tbsForm.SelectedIndexChanged = ValueReadFromFile 

沒有什麼意義。是否嘗試將處理程序分配給SelectedIndexChanged事件?或者是ValueReadFromFile選項卡的名稱?

什麼你說的是,你有兩個標籤控件,也就是說,A和B選項卡控制含有B A的標籤內,除非A有一個包含標籤控件B中選擇該標籤頁面中, B的SelectedIndexChanged事件不會觸發,如果您以編程方式更改其選項卡?

在其不同的方式你試過選擇子選項卡控件中的選項卡,正在執行這段代碼是什麼時候?

+0

的ValueReadFromFile是從一個文件中的值,在這種情況下0或1,你是正確的,它應該讀「...... tbsForm.SelectedIndex = ValueReadFromFile」我的壞。 – Superhuman 2010-12-22 20:56:52

+0

是的,它會顯示B的SelectedIndexChanged事件不會正確觸發。如果我顯示包含選項卡B的A選項卡,則每次都會觸發。如果不首先顯示,它將僅觸發第2至第n次。我很困惑。 – Superhuman 2010-12-22 21:00:59

+0

我曾嘗試使用「tbsForm.SelectedIndex = SomeValue」和「tbsForm.TabPages(SomeValue).Select」兩者都無濟於事。這些語句在包含它們的表單的構造函數中執行。我在顯示啓動畫面時執行構造函數,因爲我在窗體上需要很長時間才能加載。當我將這些語句作爲表單的Load事件的一部分執行時,一切正常,但只有在大控件完全加載之前,表單纔會顯示大約一半並且無響應。 – Superhuman 2011-01-12 05:49:30

相關問題