簡體   English   中英

以編程方式更改C#中TextBox的焦點

[英]Programatically change focus for TextBox in C#

我有一個從C#中的TextBox派生的類。 我重寫OnClick方法以顯示文件打開對話框。 之后是否有可能失去焦點? 我不希望用戶能夠編輯文本,因為此文件名可能暫時無效。 我嘗試將ReadOnly設置為true,但是選擇文件后可以更改文本。

編輯:

我為此添加了相關代碼。 現在,焦點將從我的窗體設置為下一個控件。

class Property : TextBox
class FileSelectTextBox : Property
{
    protected override void OnClick(EventArgs e)
    {
        OpenFileDialog dialog = new OpenFileDialog();
        Enabled = false;
        if (dialog.ShowDialog(this) == DialogResult.OK)
        {
            Text = dialog.FileName;
        }
        Enabled = true;
    }
}

您在這里有幾種選擇:

  1. 使文本框為ReadOnly 該文本框仍會觸發OnClick事件,但用戶無法編輯該文本。
  2. 在單擊事件結束時禁用文本框-缺點是單擊事件不會再次觸發(這意味着用戶將無法改變主意並選擇新文件)。
  3. 只需在click事件結束時將焦點設置在其他位置即可。 someOtherTextBox.Focus()

編輯:上一次建議:您可能希望文件彈出發生在FocusGained而不是OnClick ,這樣,如果用戶將其切換到控件中,對話框仍然會彈出。 當然,是否需要這種行為是您的決定。

編輯2:忽略最后的編輯。 我沒有認真考慮過,這是一個不好的建議。 (感謝單挑評論者)

設置文本框的ReadOnly = true屬性(不要在任何時間更改它),它應該可以單獨工作。

其余的代碼是這樣的..

    protected override void OnClick(EventArgs e)
        OpenFileDialog dialog = new OpenFileDialog();

        //user can still change/edit some non-existing file/path and click OK, so set the followings
        dialog.CheckFileExists = true;
        dialog.CheckPathExists = true;

        if (dialog.ShowDialog(this) == DialogResult.OK)
        {
            Text= dialog.FileName;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM