web-dev-qa-db-ja.com

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

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

textBox1.Focused = false;

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

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

this.Focus();

テキストボックスが選択されると、関数はfalseを返します。

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

104
Callum Rogers

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

フォーカスをラベルに設定できることに注意してください。 [Tab]キーを次にどこに配置するかを検討する必要があります。

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

107
Henk Holterman

label1.Focus()のようなことをして、ラベルに焦点を当てることはうまくいきませんでしたか?フォームを読み込むときにテキストボックスにフォーカスがありますが、 Velociraptors answerを試してみて、フォームのアクティブコントロールを次のようなラベルに設定しました:

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

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

this.ActiveControl = null;  //this = form
42
FTheGodfather

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

31
Spencer Ruport

フォームactivecontrolプロパティをnullに設定することもできます

ActiveControl = null;
21
marcigo36

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

8
Velociraptors

これを試してください:

最初にタブオーダーを設定します。

次に、フォームの読み込みイベントで、プログラムでTabキーを押してアプリケーションに送信できます。そのため、そのアプリケーションはタブオーダーの最初のコントロールにフォーカスを与えます。

フォームロードでは、この行も記述します。

SendKeys.Send("{TAB}");

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

7
charith rasanga

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

ActiveControl = null;

これにより、他のコントロールに夢中にならなくても、トップレベルですべてのキーボード入力をキャプチャできます。

4
Kristopher Ives

良い代替案を見つけました!他のことに集中することなく、私に最適です。

それを試してください:

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

他の要素にフォーカスを設定する必要はないようです。 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
Bhawk1990

簡単な解決策は、フォーカスを削除して、独自のクラスを作成することです。

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);
    }
}
2
VladL

これをカスタムコントロールで作成し、onFocus()で作成しました

this.Parent.Focus();

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

2
Tommix
    //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();
                });
            }
        }
    }
1
Torus

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

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

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

0
Roland

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

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

0
CosineCuber

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

例えば:

txtEmpID.TabStop = false;
0
Shaheer

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

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

    1. textbox1であるfoucusを望まないものを表示する
    2. 2番目を非表示にし、そのテキストフィールドのプロパティに移動して選択します

textbox2の0のtabindex値

  1. textbox1のtabindexを1に選択すると、textbox1に焦点が合わなくなります
0
Adiii