web-dev-qa-db-ja.com

テキストボックスコントロールでテキストを自動強調表示する

コントロールがフォーカスを取得したときに、テキストボックスコントロール内のテキストをどのように自動強調表示しますか。

34
Kevin

WindowsフォームとWPFの場合:

textbox.SelectionStart = 0;
textbox.SelectionLength = textbox.Text.Length;
50
Reed Copsey

Asp.netの場合:

textBox.Attributes.Add("onfocus","this.select();");
10
beon

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(); 
    }
9
MontrealKid

マウスクリックでテキストボックス内のテキストを強調表示することが目的の場合は、以下を追加することで簡単にできます。

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
{

}
5
Jan

組み込みのメソッドSelectAllを使用すると簡単に実現できます

単にクーはこれを書くことができます:

txtTextBox.Focus();
txtTextBox.SelectAll();

そして、textBox内のすべてが選択されます:)

4
Roxy'Pro

最も簡単な方法は TextBox.SelectAll Enterイベントのように:

private void TextBox_Enter(object sender, EventArgs e)
{
    ((TextBox)sender).SelectAll();
}
3
ShooShoSha

これが私が使ってきたコードです。自動選択する各テキストボックスに添付プロパティを追加する必要があります。私のアプリケーションのすべてのテキストボックスにこれを行わせたくないので、これは私にとって最良の解決策でした。

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" />
2
Zamotic

多数のテキストボックス(SilverlightまたはWPF)でこれを行う必要がある場合は、ブログ投稿で使用されている手法を使用できます: http://dnchannel.blogspot.com/2010/01/silverlight -3-auto-select-text-in.html 。添付プロパティとルーティングイベントを使用します。

1
user260578

ユーザーが最初にボックスをクリックしたときにのみすべてのテキストを選択し、必要に応じてテキストの中央をクリックする場合は、これが最終的に使用するコードです。

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;
}
1
Brendan Gooden

イベント「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;
        }
    }
}
0
Alatey

ウィンドウ形式で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;
    }
0
congchien

なぜ誰もそれを言っていないのかわかりませんが、あなたもこれを行うことができます

textbox.Select(0, textbox.Text.Length)
0
believe me

あなたはこれを使うことができます。 :D

TextBox1.Focus();    
TextBox1.Select(0, TextBox1.Text.Length);
0
Majid

On_Enter Event」ですべてを選択する場合、これは目標の達成に役立ちません。 "On_Click Event"を使用してみてください

    private void textBox_Click(object sender, EventArgs e)
    {
        textBox.Focus();
        textBox.SelectAll();
    }
0
Sayed idrees
 textBoxX1.Focus();
 this.ActiveControl = textBoxX1;
 textBoxX1.SelectAll();