2010-02-17 50 views
0

我有一個應用程序,我試圖模仿像這個網站上的標籤和標題位置找到的「軟描述」文本框。抑制Windows窗體上的自動文本框選擇Form.Show()

我這樣做的方式主要是創建我的文本框,並根據鼠標指針進入或離開控件時發生的情況,它更新文本框的內容以獲得效果。

問題是什麼時,我的窗體第一次顯示時,鼠標光標立即跳轉到第一個文本框,這將刪除標題告訴用戶什麼文本框是。

如果我關閉文本框中的AcceptTab,那麼一切都按預期工作,但用戶失去了在文本框中選項卡的功能。

有沒有辦法關閉這個自動選擇的文本框?

回答

0

我在Jason的技術上使用了一個變體。首先,我創建了一個帶有tabindex 0的虛擬文本框。這樣,當顯示窗體時,該文本框將被選中。接下來,我使虛擬文本框的寬度爲零,因此它沒有可見的組件。

但是,一旦表單被加載,我不希望用戶能夠切換到「不存在」的文本框。因此,我添加了這兩位:

//These functions prevent the textboxes from being implicitly selected. 
    private void dummyBox_Leave(object sender, EventArgs e) 
    { 
     dummyBox.TabStop = false; 
    } 

    private void Main_Enter(object sender, EventArgs e) 
    { 
     dummyBox.TabStop = true; 
     dummyBox.Select(); 
    } 

其中Main是我的表單的名稱。

希望這可以幫助別人。

Billy3

2

你可以this.Focus()在窗體上,或在一些標籤控件上?

+0

「Windows窗體在下面的列表控件是不可選的。從這些控件派生的控件也是不可選擇的。...面板,組框,圖片框,進度條,分離器,標籤** **,LinkLabel的」 - http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx – Powerlord

+0

沒有快樂。 :(選擇表單隱式選擇帶有第一個tabindex的項目,這恰好是我們友好的鄰域文本框。 –

+0

如果您沒有其他窗體上的控件需要關注(OK按鈕?)..如果你創建一個新的文本框而不將其分配給表單並專注於該表單。或SuspendLayout(),將它添加到窗體中,重點關注它,從窗體ResumeLayout()中移除它? –

0

TabIndex屬性控制事物將在哪個順序中選中,並且在加載時,焦點轉到第一個控件(按TabIndex排序),該控件具有AcceptTab爲true。您可以更改排序,以便您希望用戶關注的控件的開始位置最低(並且如您所期望的那樣讓選項卡在控件中循環)。或者,正如Jason所建議的那樣,您可以簡單地在FormLoad事件的任何控件或窗體本身上調用Focus()。

+0

僅僅重複我已經提出的問題並不能告訴我那麼多。我已經說過,我知道掛鉤是原因。我正在尋找一種方法來在顯示錶單時關閉隱式的第一個選項卡。 –

0

有點晚了,但一個完美的解決方案是選擇的形式的負載形式。

將此行添加到構造函數中會得到期望的結果。

this.Select(); 

但是當使用像打​​開文件對話框的多線程控制,如果ü要以無焦點的/取消選擇文本框this.Select()沒有工作,所以我選擇了按鈕形式使用。

button1.Select(); 
相關問題