複数のTextBoxからフォーカスを削除する必要があります。私は使用してみました:
textBox1.Focused = false;
ReadOnly
プロパティ値はtrue
です。
次に、すべてのTextBoxからフォームを削除するようにフォームにフォーカスを設定しようとしましたが、これも機能しません。
this.Focus();
テキストボックスが選択されると、関数はfalse
を返します。
それでは、TextBoxからフォーカスを削除するにはどうすればよいですか?
フォーカスを移動するには、他のフォーカス可能なコントロールが必要です。
フォーカスをラベルに設定できることに注意してください。 [Tab]キーを次にどこに配置するかを検討する必要があります。
また、フォームに設定できないことに注意してください。フォームやパネルなどのコンテナコントロールは、最初の子コントロールにフォーカスを渡します。これは、TextBoxである可能性があります。
label1.Focus()
のようなことをして、ラベルに焦点を当てることはうまくいきませんでしたか?フォームを読み込むときにテキストボックスにフォーカスがありますが、 Velociraptors answerを試してみて、フォームのアクティブコントロールを次のようなラベルに設定しました:
private void Form1_Load(object sender, EventArgs e)
{
this.ActiveControl = label1;
}
次のコードを追加できます。
this.ActiveControl = null; //this = form
テキストボックスを無効にしてから有効にしてみてください。
フォームactivecontrol
プロパティをnull
に設定することもできます
ActiveControl = null;
Focus
は入力フォーカスを設定します。したがって、フォームは入力を受け付けないため、フォームに設定することはできません。フォームのActiveControl
プロパティを別のコントロールに設定してみてください。 Select
を使用して特定のコントロールを選択するか、SelectNextControl
を使用してタブ順序で次のコントロールを選択することもできます。
これを試してください:
最初にタブオーダーを設定します。
次に、フォームの読み込みイベントで、プログラムでTabキーを押してアプリケーションに送信できます。そのため、そのアプリケーションはタブオーダーの最初のコントロールにフォーカスを与えます。
フォームロードでは、この行も記述します。
SendKeys.Send("{TAB}");
これでうまくいきました。
この投稿は私にこれをするように導きました:
ActiveControl = null;
これにより、他のコントロールに夢中にならなくても、トップレベルですべてのキーボード入力をキャプチャできます。
良い代替案を見つけました!他のことに集中することなく、私に最適です。
それを試してください:
private void richTextBox_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = true;
}
他の要素にフォーカスを設定する必要はないようです。 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
それは私にとってはうまくいきましたが、なぜあなたにとってうまくいかなかったのか分かりません:/
簡単な解決策は、フォーカスを削除して、独自のクラスを作成することです。
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);
}
}
これをカスタムコントロールで作成し、onFocus()で作成しました
this.Parent.Focus();
Texboxがフォーカスされている場合-テキストボックスの親(フォーム、またはパネル...)を即座にフォーカスします。これは、カスタムコントロールでこれを行う場合に適したオプションです。
//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();
});
}
}
}
必要なのが、テキストボックスのコンテンツ全体に青色の選択がない光学効果だけである場合は、テキストを選択しないでください。
textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();
この後、.Text += "..."
を使用してコンテンツを追加すると、青色の選択は表示されません。
それを回避する方法は、winformコントロールをすべて配置することです。すべてのラベルと非選択のwinformコントロールをタブオーダー0にして、最初のコントロールをタブオーダー2にして、各選択可能なコントロールの順序を1、3、4、5などに増やします...
このようにして、私のWinformsが起動するとき、最初のTextBoxにフォーカスがありません!
フォーカスされていないビューコントロールのTabStop
をFalse
に設定してみてください。
例えば:
txtEmpID.TabStop = false;
あなたは2つの方法でこれを行うことができます
2つのテキストボックスをドラッグします
textbox2の0のtabindex値