2009-06-17 25 views
1

我有一個控件,其中包含NumericUpDown。 updown僅在容器具有焦點時顯示,因此容器必須是可選的(否則它永遠不會獲得焦點)。我希望控件的行爲與Tab鍵順序相同;也就是說,當用戶選中控件時,它會顯示updown和updown的重點;當用戶遠離updown標籤時,就好像他們已經從控件中取出標籤。如何選擇前一個控件到容器控件?

很容易實現第一部分:在容器的OnEnter中,我關注了updown。如果用戶在不移位的情況下退出,它也可以正常工作,因爲Tab鍵順序中的下一個控件是正確的。但是,上一個控件按照tab鍵順序排列是容器,因爲它必須是可選的;所以當用戶從上下移開標籤時,容器被選中,因此updown被再次選中。

當用戶從updown移開標籤時,如何選擇上一個控件到容器控件?

UPDATE:

,當我需要做我的問題是沒有檢測到 - 它發現發送焦點的控制。

UPDATE:

SelectNextControl似乎只容器的父級的控制範圍內工作;如果容器是其父項的唯一控件,則即使在層次結構中應該通過選項卡獲得焦點的其他控件中,也不會改變焦點。

回答

0

這是一個黑客攻擊,但是你可以使用OnEnter事件和一個布爾變量。如果該變量設置爲true,那麼您已經在您的容器中並轉到上一個控件(該控件可能是您的容器控件的屬性,以便您知道要前往哪裏)。

如果該變量爲false,則只需進入自定義控件並關注上/下。

在容器退出時,將變量設置爲false。

我確定那裏有些簡單的東西,但是這是我能想到的最快捷的事情。

+0

我的問題是沒有檢測到,當我需要做到這一點 - 它找到控制發送焦點。 – Simon 2009-06-17 13:47:07

1

,如果你知道的標籤的方向,你可以使用SendKeys.Send("+{TAB}");SendKeys.Send("{TAB}");

或者你可以使用Control.SelectNextControl()

1
void UserControl1_Leave(object sender, EventArgs e) 
    { 
     this.numericUpDown1.Visible = false; 
     Control c = Parent.Controls[this.Name]; 
     int i = Parent.Controls.IndexOf(c); 
     Parent.Controls[i - 1].Focus(); 
    } 

我已經添加了這個假事件的自定義控制,其工作對我來說。基本上,當用戶將製表符移開時,此事件將焦點設置爲父窗體的控件集合中的上一個控件。不知道它是否準確地尋找,但希望它能讓你朝正確的方向發展。

+0

這將假設在Parent.Controls集合中有一個先前的控件,但經過一些調整,考慮到這一點,這將是正確的解決方案。 – 2009-06-17 16:30:40

0

其實這似乎是我的默認行爲?

+1

selectnextcontrol有倒過來: SelectNextControl(Me,False,True,False,False) – eschneider 2009-06-17 14:34:42