954,500 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

text box validation

Hello daniweb chums

I once again cannot seems to get a simple bit of text box validation working

I am trying to detect if a first name entered contains a number by converting the text box text into a char array and then convert each character entered (using a for loop) to char and catch the format exception when a number is entered. *Deep Breath*

Any thoughts?

And please don't just tell me not to do it this way unless it is impossible

Thanks in advance :)

Char[] fnchar;
                char n;
                fnchar = tbname.Text.ToCharArray();
                for (int p = 0; p < fnchar.Length; p++)
                {
                    try
                    {
                        n = fnchar[p];
                        tbname.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(179)))), ((int)(((byte)(113)))));
                        fni = true;
                    }
                    catch (FormatException)
                    {
                        fni = false;
                        tbname.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(205)))), ((int)(((byte)(112)))), ((int)(((byte)(84)))));
                    }
                }
GonzR
Newbie Poster
17 posts since Nov 2011
Reputation Points: 10
Solved Threads: 0
 

Hi, GonzR.
Here's a few points that may be helpful:
1. Char.IsLetter Method (Char) .
2. Char.IsDigit Method (Char)
3. In C#, strings are char arrays, so there's no need to convert them. You can just iterate through string using any loop.
4. Also, there's an option to check your string, using regular expressions. Maybe it's too early, but still, here's a link: C# newbie: verifying that a string contains only letters .

Also, I would like to ask .. what magic are you doing with converting your numbers? :D Considering that the number literals in C# are treated as Int32 (or int) ...

Antenka
Posting Whiz
362 posts since Nov 2008
Reputation Points: 293
Solved Threads: 82
 

do you mean for the "ForeColor"? That is just how it was written in the auto generated code

Thanks for your help Antenka!
this way of doing it looks a lot simpler.

my code now looks like this:

fni = true;
                char n;

                for (int p = 0; p < (tbname.Text.Length + 1); p++)
                {
                    n = tbname.Text[p];
                    c = (Char.IsLetter(n));
                    if (c == true)
                    {
                    }
                    else
                    {
                        fni = false;
                    }
                }

                if (fni == true)
                {
                    tbname.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(179)))), ((int)(((byte)(113)))));
                }
                else
                {
                    tbname.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(142)))), ((int)(((byte)(35)))), ((int)(((byte)(35)))));
                }
GonzR
Newbie Poster
17 posts since Nov 2011
Reputation Points: 10
Solved Threads: 0
 

It doesnt pick up when a number is entered and it doesnt do anything when a number isnt entered. I dont get it :\ this code just doesnt seem to work at all

GonzR
Newbie Poster
17 posts since Nov 2011
Reputation Points: 10
Solved Threads: 0
 
do you mean for the "ForeColor"?


Exactly. Know why? Because:

((int)(((byte)(60)))


it's the same as

60


Also, tbname.Text.Length + 1 . Why plus 1? Count how many times it would iterate if your string would be, e.g. 2 symbols length.

It doesnt pick up when a number is entered and it doesnt do anything when a number isnt entered. I dont get it :\ this code just doesnt seem to work at all

Answer the previous question, cause it may throw an exceptions to you (I would be surprised, if it's not :)). That may be cause a problem.

P.S. Char.IsLetter(n) works pretty good in here, and determines a strings also as the others symbols.

Antenka
Posting Whiz
362 posts since Nov 2008
Reputation Points: 293
Solved Threads: 82
 

Okay iv now changed my code to :

fni = true;
                char n;

                for (int p = 0; p <= tbname.Text.Length; p++)
                {
                    n = tbname.Text[p];
                    //c = (Char.IsLetter(n));
                    if (Char.IsLetter(n))
                    {

                    }
                    else
                    {
                        fni = false;
                    }
                }

                if (fni == true)
                {
                    tbname.ForeColor = System.Drawing.Color.FromArgb((60), (179), (113));
                }
                else
                {
                    tbname.ForeColor = System.Drawing.Color.FromArgb((142), (35), (35));
                }

but still not working :(

A magician never tells ;)
tbh i didnt really understand what you meant hah

GonzR
Newbie Poster
17 posts since Nov 2011
Reputation Points: 10
Solved Threads: 0
 

Ok .. suppose, we have entered a text, that consists of 2 letters.
What would we have here:

for (int p = 0; p <= tbname.Text.Length; p++)

Here, we will iterate from 0 to 2, ie:
we will take tbname.Text[0], tbname.Text[1], tbname.Text[2] .. doesn't look weird for you? :)
Try it yourself: enter 2 letters and debug this thing. And post here your original string and the thing that you have under tbname.Text[2].A magician never tells
I just want you to find your solution by yourself .. I'm just trying to lead you in a right direction ;)but still not working
Try the thing, that I said upper in this post. Fix a bug, if there is any .. and .. I'm waiting for your results ;)

Antenka
Posting Whiz
362 posts since Nov 2008
Reputation Points: 293
Solved Threads: 82
 

I found out what each number was outputting and it was exactly how i expected.
now my code is this:

lni = true;
                char n;
                for (int p = 0; p <= tblname.Text.Length; p++)
                {
                    n = tblname.Text[p];
                    if (Char.IsNumber(n))
                    {
                        lni = false;
                        p = (tblname.Text.Length + 1);
                    }
                    else
                    {
                        lni = true;
                        //label1.Text = tblname.Text[p].ToString();
                        //label1.Visible = true;
                    }
                }
                
                
                if (lni == true)
                {
                    tblname.ForeColor = System.Drawing.Color.FromArgb((60), (179), (113));
                }
                else
                {
                    tblname.ForeColor = System.Drawing.Color.FromArgb((142), (35), (35));
                }

Its now picking up when a number is entered and iv also got it to stop the loop when a number is entered. However, It doesnt do anything when lni = true ????
argh im so confusedd

GonzR
Newbie Poster
17 posts since Nov 2011
Reputation Points: 10
Solved Threads: 0
 

That's really weird when your prog founds a 3d char in a 2-char string ;)

Antenka
Posting Whiz
362 posts since Nov 2008
Reputation Points: 293
Solved Threads: 82
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: