DHB
DHB

Reputation: 161

Trim textbox text after 20 characters used and spaces if contains spaces

I have a WinFormApp with 2 txtboxes (LongName and ShortName) with a Button.

When txt is entered in the LongName txtbox, I want to press the button to shorten all txt inside LongName txtbox to the first 20 characters imput and to remove any spaces within' the txtbox then display the results in the ShortName txtbox. I'm having a real hard time trying to get this correct. I've tried a number of ways to try but ultimately can't seem to get it right. Here is example code:

private void btnGetSN_Click(object sender, EventArgs e)
{
    Regex space = new Regex(@" ");
    MatchCollection spacematch = space.Matches(txtLongName.Text);
    if (txtLongName.Text.Length > 20)
    {
        string toTrim = txtLongName.Text;

        toTrim = toTrim.Trim();

        txtShortName.Text = ("'" + toTrim.ToString() + "'");
    }
    if (spacematch.Count > 0)
    {
        txtLongName.Text.Replace(" ", "");
    }
}//closes method

I've been able to limit the txtbox to only 20 characters in the properties but I would like to setup a If variable to allow more customization.

Am I on the right track?

No errors in the code but when executing the button, nothing happens. Any help is appreciated.

Upvotes: 0

Views: 1023

Answers (2)

Xiaoy312
Xiaoy312

Reputation: 14477

string.Replace() doesn't update the string itself, but rather returns a new string that is modified.

private void btnGetSN_Click(object sender, EventArgs e)
{
    // remove space from txtLongName
    txtLongName.Text = txtLongName.Text.Replace(" ", string.Empty);

    // take only the first 20characters from txtLongName
    txtShortName.Text = txtLongName.Text.Substring(0, Math.Min(txtLongName.Text.Length, 20));
}

EDIT: Previous code will remove space from txtLongName. If that is not intended, use this instead :

private void btnGetSN_Click(object sender, EventArgs e)
{
    // remove space from txtLongName
    var name = txtLongName.Text.Replace(" ", string.Empty);

    // take only the first 20characters from txtLongName
    txtShortName.Text = name.Substring(0, Math.Min(name.Length, 20));
}

Upvotes: 4

techspider
techspider

Reputation: 3410

Looks like you need to write differently

private void button1_Click(object sender, EventArgs e)
    {
        var shortName = txtLongName.Text.Trim().Replace(" ", "");

        var maxLength = (shortName.Length > 20) ? 20 : shortName.Length;

        if(txtLongName.Text.Trim().Length > 0)
            txtShortName.Text = shortName.Substring(0, maxLength);
    }

Upvotes: 3

Related Questions