コントロールがフォーカスを取得したときに、テキストボックスコントロール内のテキストをどのように自動強調表示しますか。
WindowsフォームとWPFの場合:
textbox.SelectionStart = 0;
textbox.SelectionLength = textbox.Text.Length;
Asp.netの場合:
textBox.Attributes.Add("onfocus","this.select();");
WPFアプリケーション全体に対して実行する場合は、次の操作を実行できます。-ファイルApp.xaml.csで
protected override void OnStartup(StartupEventArgs e)
{
//works for tab into textbox
EventManager.RegisterClassHandler(typeof(TextBox),
TextBox.GotFocusEvent,
new RoutedEventHandler(TextBox_GotFocus));
//works for click textbox
EventManager.RegisterClassHandler(typeof(Window),
Window.GotMouseCaptureEvent,
new RoutedEventHandler(Window_MouseCapture));
base.OnStartup(e);
}
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
(sender as TextBox).SelectAll();
}
private void Window_MouseCapture(object sender, RoutedEventArgs e)
{
var textBox = e.OriginalSource as TextBox;
if (textBox != null)
textBox.SelectAll();
}
マウスクリックでテキストボックス内のテキストを強調表示することが目的の場合は、以下を追加することで簡単にできます。
this.textBox1.Click += new System.EventHandler(textBox1_Click);
に:
partial class Form1
{
private void InitializeComponent()
{
}
}
ここで、textBox1はForm1にある関連するテキストボックスの名前です
次に、メソッド定義を作成します。
void textBox1_Click(object sender, System.EventArgs e)
{
textBox1.SelectAll();
}
に:
public partial class Form1 : Form
{
}
組み込みのメソッドSelectAll
を使用すると簡単に実現できます
単にクーはこれを書くことができます:
txtTextBox.Focus();
txtTextBox.SelectAll();
そして、textBox内のすべてが選択されます:)
最も簡単な方法は TextBox.SelectAll
Enterイベントのように:
private void TextBox_Enter(object sender, EventArgs e)
{
((TextBox)sender).SelectAll();
}
これが私が使ってきたコードです。自動選択する各テキストボックスに添付プロパティを追加する必要があります。私のアプリケーションのすべてのテキストボックスにこれを行わせたくないので、これは私にとって最良の解決策でした。
public class AutoSelectAll
{
public static bool GetIsEnabled(DependencyObject obj)
{
return (bool)obj.GetValue(IsEnabledProperty);
}
public static void SetIsEnabled(DependencyObject obj, bool value)
{
obj.SetValue(IsEnabledProperty, value);
}
static void ue_Loaded(object sender, RoutedEventArgs e)
{
var ue = sender as FrameworkElement;
if (ue == null)
return;
ue.GotFocus += ue_GotFocus;
ue.GotMouseCapture += ue_GotMouseCapture;
}
private static void ue_Unloaded(object sender, RoutedEventArgs e)
{
var ue = sender as FrameworkElement;
if (ue == null)
return;
//ue.Unloaded -= ue_Unloaded;
ue.GotFocus -= ue_GotFocus;
ue.GotMouseCapture -= ue_GotMouseCapture;
}
static void ue_GotFocus(object sender, RoutedEventArgs e)
{
if (sender is TextBox)
{
(sender as TextBox).SelectAll();
}
e.Handled = true;
}
static void ue_GotMouseCapture(object sender, MouseEventArgs e)
{
if (sender is TextBox)
{
(sender as TextBox).SelectAll();
}
e.Handled = true;
}
public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool),
typeof(AutoSelectAll), new UIPropertyMetadata(false, IsEnabledChanged));
static void IsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ue = d as FrameworkElement;
if (ue == null)
return;
if ((bool)e.NewValue)
{
ue.Unloaded += ue_Unloaded;
ue.Loaded += ue_Loaded;
}
}
}
ここで行った主な変更は、これまでに見た多くの例にロードされたイベントを追加することでした。これにより、コードがアンロードされた(つまり、タブが変更された)後もコードが機能し続けます。また、キーボードでフォーカスするだけでなく、マウスでテキストボックスをクリックしたときにテキストが選択されるようにするコードも含めました。注:実際にテキストボックス内のテキストをクリックすると、カーソルが文字の間に挿入されるはずです。
これを使用するには、xamlに次のタグを含めます。
<TextBox
Text="{Binding Property}"
Library:AutoSelectAll.IsEnabled="True" />
多数のテキストボックス(SilverlightまたはWPF)でこれを行う必要がある場合は、ブログ投稿で使用されている手法を使用できます: http://dnchannel.blogspot.com/2010/01/silverlight -3-auto-select-text-in.html 。添付プロパティとルーティングイベントを使用します。
ユーザーが最初にボックスをクリックしたときにのみすべてのテキストを選択し、必要に応じてテキストの中央をクリックする場合は、これが最終的に使用するコードです。
FocusEnter
イベントは後で発生するため、Click
イベントを処理するだけでは機能しません。また、FocusイベントでSelectAll()
する場合、選択をオーバーライドします。
private bool isFirstTimeEntering;
private void textBox_Enter(object sender, EventArgs e)
{
isFirstTimeEntering = true;
}
private void textBox_Click(object sender, EventArgs e)
{
switch (isFirstTimeEntering)
{
case true:
isFirstTimeEntering = false;
break;
case false:
return;
}
textBox.SelectAll();
textBox.SelectionStart = 0;
textBox.SelectionLength = textBox.Text.Length;
}
イベント「Enter」(例:Tabキーを押す)または「First Click」では、すべてのテキストが選択されます。 dotNET 4.0
public static class TbHelper
{
// Method for use
public static void SelectAllTextOnEnter(TextBox Tb)
{
Tb.Enter += new EventHandler(Tb_Enter);
Tb.Click += new EventHandler(Tb_Click);
}
private static TextBox LastTb;
private static void Tb_Enter(object sender, EventArgs e)
{
var Tb = (TextBox)sender;
Tb.SelectAll();
LastTb = Tb;
}
private static void Tb_Click(object sender, EventArgs e)
{
var Tb = (TextBox)sender;
if (LastTb == Tb)
{
Tb.SelectAll();
LastTb = null;
}
}
}
ウィンドウ形式でc#。 Enterイベントを使用する場合、機能しません。 MouseUpイベントを使用してみてください
bool FlagEntered;
private void textBox1_MouseUp(object sender, MouseEventArgs e)
{
if ((sender as TextBox).SelectedText == "" && !FlagEntered)
{
(sender as TextBox).SelectAll();
FlagEntered = true;
}
}
private void textBox1_Leave(object sender, EventArgs e)
{
FlagEntered = false;
}
なぜ誰もそれを言っていないのかわかりませんが、あなたもこれを行うことができます
textbox.Select(0, textbox.Text.Length)
あなたはこれを使うことができます。 :D
TextBox1.Focus();
TextBox1.Select(0, TextBox1.Text.Length);
「On_Enter Event」ですべてを選択する場合、これは目標の達成に役立ちません。 "On_Click Event"を使用してみてください
private void textBox_Click(object sender, EventArgs e)
{
textBox.Focus();
textBox.SelectAll();
}
textBoxX1.Focus();
this.ActiveControl = textBoxX1;
textBoxX1.SelectAll();