SubZero SubZero - 3 months ago 19
C# Question

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, i.e. 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.

Set Set
Answer

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