简体   繁体   中英

Is there a way to select all with one click in a textbox in c# winform?

I am making a number guessing game, and for convenience I would like to add a line of code to my program that selects all text within a text box with one click. I have tried everything I have found on here along with other trouble shooting sites I have found on google and none of it seems to work, even trying to force focus on the textbox. The textbox still behaves like a normal textbox, ie having to double click to select all.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace randomNumberGuessingGameFourthTry
{
     public partial class Form1 : Form
     {
         public Form1()
         {
          InitializeComponent();
         }

    private void startGame_Click(object sender, EventArgs e)
    {
        if (min.Text == "" || min.Text == " " || min.Text == "Min")
        {
            MessageBox.Show("You didn't enter a minimum value of zero or greater so the default value of 0 was set.");
            min.Text = "0";
        }

        if (max.Text == "" || max.Text == " " || max.Text == "Max")
        {
            MessageBox.Show("You didn't enter a maximum value so the default value of 10 was set.");
            max.Text = "11";
        }

        startGuessing startGame = new startGuessing(min.Text, max.Text);
        this.Hide();
        startGame.ShowDialog();
    }

   private void exitGame_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void min_TextChanged(object sender, EventArgs e)
    {
        min.Focus();
        min.SelectAll();
        min.SelectionLength = min.Text.Length;

        int userInput1 = Convert.ToInt32(min.Text);
        if (!(userInput1 >= 0))
        {
            MessageBox.Show("Your min range must be at least 0 or higher", "Invalid range found");
        }
    }

    private void max_TextChanged(object sender, EventArgs e)
    {


        int userInput1 = Convert.ToInt32(min.Text);
        int userInput2 = Convert.ToInt32(max.Text);
        if (!(userInput2 <= userInput1 + 9))
        {
            MessageBox.Show("Your max range must be at least 10 digits higher than " + userInput1, "Invalid range found");
        }
    }
}

}

The above is the code for my form1.cs I figured if I could make it work here I could make it work on my second form in this program.

You should first call SelectAll() method then Focus() , not vice versa. This minimal example is working for me:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        textBox1.Click += TextBoxOnClick;
    }

    private void TextBoxOnClick(object sender, EventArgs eventArgs)
    {
        var textBox = (TextBox) sender;
        textBox.SelectAll();
        textBox.Focus();
    }
}

What did you try?

The following works fine for me:

private void textBox1_Click(object sender, EventArgs e)
{
    TextBox textBox = (TextBox)sender;

    textBox.SelectAll();
}

Naturally, you need to add textBox1_Click() as an event handler for your TextBox 's Click event.

Note that the above will cause the text to always be completely selected with any mouse click in the control. This will make it impossible to select portions of the text using the mouse. If you want a more sophisticated behavior, you can use the answers found here:

Making a WinForms TextBox behave like your browser's address bar

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM