WinFormsのTextBoxからフォーカスを削除する方法は?


110

複数のTextBoxからフォーカスを削除する必要があります。私は使ってみました:

textBox1.Focused = false;

そのReadOnlyプロパティ値はtrueです。

次に、フォームにフォーカスを設定して、すべてのTextBoxからフォームを削除しようとしましたが、これも機能しません。

this.Focus();

そして、falseテキストボックスが選択されると、関数は戻ります。

では、TextBoxからフォーカスを削除するにはどうすればよいですか?

回答:


113

フォーカスを移動するには、他のフォーカス可能なコントロールが必要です。

フォーカスをラベルに設定できることに注意してください。次に[Tab]キーでどこに移動するかを検討することをお勧めします。

また、フォームに設定することはできません。フォームやパネルなどのコンテナコントロールは、最初の子コントロールにフォーカスを渡します。これは、移動したいTextBoxである可能性があります。


ありがとう。ラベルに注目したところ、テキストボックスがフォーカスされなくなりました。なんらかの理由でフォームに集中できないようです。
Callum Rogers、

7
コンテナコントロール(フォーム、パネル)は、フォーカスを最初の子コントロールに渡します。
Henk Holterman、

素晴らしい提案。これは私の問題を解決しました。私はフォーム自体に対してKeyPressを使用しており、いくつかのボタンなどがあります。問題は、アプリがカードリーダーから入力を取得しているため、フォーカスがフォーム自体から離れると、すべてが完全に壊れてしまうことです。ボタンをクリックした後にラベルに焦点を当てることで問題が解決しました。本当にありがとう!
joelc 2013

62

レーベルに焦点を当てることは私にはうまくいきませんでしたlabel1.Focus()。フォームをロードするとき、テキストボックスにはまだフォーカスがありますが、Velociraptorsの 回答を試すと、フォームのアクティブコントロールを次のようにラベルに設定しました。

private void Form1_Load(object sender, EventArgs e)  
{ 
    this.ActiveControl = label1;       
}

7
私はあなたに百万の矢を与えることができればいいのにと思います。私は人々が示唆した他のすべてを試しました、これはうまくいった唯一のものです。何らかの理由で、テキストボックスは
常に

3
これは、パネルなどのコンテナーコントロールでも機能します。私は完全にフォーカスを削除したかった、それが働いた:this.ActiveControl = panelOnMyForm;
ティムSchmelter

52

次のコードを追加できます。

this.ActiveControl = null;  //this = form

7
これが最良の答えだと思います。MSDNを読んだ場合、「フォーカス」のような他の多くのメソッドは、コントロールデザイナの低レベルメソッドとしてリストされています。他のすべてを「選択しない」ようにしたい場合、これは最も簡単なアプローチのように見えます。
ロストフ

1
これは、Microsoftが最初にこのプロパティを追加した理由の半分です。
Panzercrisis

これは最もエレガントなソリューションのようですが、私の場合は完璧に機能しました。
NetWave

私は本当にこの答えが機能するようにしたいのですが、私の場合は、LeaveイベントをトリガーしたのにValidating / Validatedイベントをトリガーしなかったので機能しませんでした。
Rhys Jones

32

テキストボックスを無効にしてから有効にしてみてください。


5
その間、タブリストの次のコントロールを自動的に選択するので、これはかなり滑らかに機能します。
Nick

3
私はMVVMを使用してSilverlightで開発しており、TextBoxをターゲットとする動作を使用してこれを実装しました。無効化/有効化ソリューションにフォーカスを設定するのに便利な別のUIElementがなかったので、うまくいきました。ありがとう!
Albert Oldfield

どうすれば無効にできますか?
miguelmpn

1
@miguelmpn textBox1.Enabled = false;はテキストボックスを無効にします。に設定するtrueと、再び有効になります。
Raktim Biswas

24

また、forms activecontrolプロパティをnulllikeに設定することもできます。

ActiveControl = null;

7
これまでスクロールして、回答としてマークされた回避策を使用しないでください
makoshichi

それでもこの日の最良の答えは、ここのバディ、私の賛成票をとってください。
xoxel

8

Focus入力フォーカスを設定するため、フォームが入力を受け入れないため、フォームに設定しても機能しません。フォームのActiveControlプロパティを別のコントロールに設定してみてください。を使用Selectして、特定のコントロールSelectNextControlを選択したり、タブオーダーの次のコントロールを選択したりすることもできます。


1
ここで他のすべてを試してSelect()、私のために働いた。
Derek W

8

これを試してください:

まずタブ順を設定します。

次に、フォームロードイベントで、プログラムによってタブキーをアプリケーションに送信できます。そのため、そのアプリケーションはタブオーダーの最初の制御にフォーカスを与えます。

フォームの読み込みでは、この行も書き込みます。

SendKeys.Send("{TAB}");

これでうまくいきました。


4

この投稿は私にこれをするように導きました:

ActiveControl = null;

これにより、他のコントロールに煩わされることなく、すべてのキーボード入力をトップレベルでキャプチャできます。


3

良い代替案を見つけました!他のことに焦点を当てることなく、私にとっては最もうまくいきます。

それを試してください:

private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{    
    e.SuppressKeyPress = true;
}

3

私はこれを自分のカスタムコントロールで作成し、これをonFocus()で実行しました

this.Parent.Focus();

つまり、texboxがフォーカスされている場合-テキストボックスの親(フォーム、またはパネル...)に即座にフォーカスされます。これは、カスタムコントロールでこれを作成する場合に適したオプションです。


2

フォーカスを他の要素に設定する必要がないようです。Windows Phone 7アプリケーションでは、Focusメソッドを使用して、テキストボックスのフォーカスの設定を解除しています。

次のコマンドを実行すると、フォーカスが何も設定されません。

void SearchBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        Focus();
    }
}

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

それは私にとってはうまくいきましたが、なぜあなたにとってうまくいかなかったのか分かりません:/


2

単純な解決策は、フォーカスを無効にすることです。独自のクラスを作成するだけです。

public class ViewOnlyTextBox : System.Windows.Forms.TextBox {
    // constants for the message sending
    const int WM_SETFOCUS = 0x0007;
    const int WM_KILLFOCUS = 0x0008;

    protected override void WndProc(ref Message m) {
        if(m.Msg == WM_SETFOCUS) m.Msg = WM_KILLFOCUS;

        base.WndProc (ref m);
    }
}

まさに私が探していた種類のソリューション。ありがとう!
LeftyCoder 2015

1
    //using System;
    //using System.Collections.Generic;
    //using System.Linq;

    private void Form1_Load(object sender, EventArgs e)
    {
        FocusOnOtherControl(Controls.Cast<Control>(), button1);
    }

    private void FocusOnOtherControl<T>(IEnumerable<T> controls, Control focusOnMe) where T : Control
    {
        foreach (var control in controls)
        {
            if (control.GetType().Equals(typeof(TextBox)))
            {
                control.TabStop = false;
                control.LostFocus += new EventHandler((object sender, EventArgs e) =>
                {                     
                    focusOnMe.Focus();
                });
            }
        }
    }

0

私がそれを回避する方法は、すべてのwinformコントロールを配置することです。すべてのラベルと非選択のwinformコントロールをタブオーダー0として作成し、次に最初のコントロールをタブオーダー2として作成し、選択可能な各コントロールの順序を1、3、4、5などとインクリメントします。

このようにして、Winformsを起動すると、最初のTextBoxにフォーカスがありません。


0

あなたは2つの方法でこれを行うことができます

  • 目的のテキストボックスの「TabStop」プロパティをfalseに設定するだけで、テキストフィールドが1つでもフォーカスされなくなります
  • 2つのテキストボックスをドラッグ

    1. あなたがtextbox1であるfoucusが欲しくないものを目に見えるようにします
    2. 2つ目を非表示にし、そのテキストフィールドのプロパティに移動して、

tabindex値をtextbox2の0に

  1. そして、textbox1のtabindexを1に選択すると、textbox1にフォーカスされなくなります。

0

テキストボックスのコンテンツ全体に青色の選択がないという光学効果だけが必要な場合は、テキストを選択しないだけです。

textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();

この後、でコンテンツを追加すると.Text += "..."、青色の選択は表示されません。


0

設定TabStopしてみてくださいFalseフォーカスされていないビューコントロールにて。

たとえば:

txtEmpID.TabStop = false;

-1

TextBoxを保持するFormまたはUserControlのコンストラクターで

SetStyle(ControlStyles.Selectable, false);

InitializeComponent();の後 ソース:https : //stackoverflow.com/a/4811938/5750078

例:

public partial class Main : UserControl
{

    public Main()
    {
        InitializeComponent();
        SetStyle(ControlStyles.Selectable, false);
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.