Avatar billede Syska Mester
05. november 2004 - 00:27 Der er 14 kommentarer og
1 løsning

Egen UserControl til IP

Hey fellow C#-fokes,

Jeg er ved at lave min egen UserControl til at indtaste en ip adresse.....

Jeg har fået lavet sådan at når man har tastet 3 tal skifter den automatisk til næste octec...

og skriver man over 255 laver den det til 255 :-), da alt over jo ikke er gyldig IP'er.

ting jeg mangler:
At teste på om brugerens input er et tal, bare et hint til functions navn vil være nok, har ikke leget med sådan noget før?

dynamisk så jeg kun skal lave den her function en gang:
private void oct_TextChanged(object sender, System.EventArgs e)
{
    if(Convert.ToInt32(this.oct1.Text) > 255){
        this.oct1.Text = "255";
    }
    if(this.oct1.Text.Length > 2){
        this.oct2.Focus();
    }
}

Som i kan se, hedder mine 4 felter til ip indtastning oct1, oct2, oct3 og oct4.
Det ville jo være smart hvis jeg kunne bruge samme function, men hvornår får jeg navnet med ned i min fucntion, jeg skal jo også ved om det er den sidste octet den er ved, for hvis skal den jo ikke springe til næste kasse, etc. håber i kan forstå hvad det er jeg er ude efter, ellers må i jo spørge :-)

natter C#-fokes
Avatar billede prec Nybegynder
05. november 2004 - 09:47 #1
du sætter alle felter til at bruge den samme funktion ved TextChanged, i din event funktion har du et parameter der hedder object sender, dette er altid det object der sendte et event.

TextBox oct = (TextBox)sender;

så kan du lave checks osv på oct.
Avatar billede prec Nybegynder
05. november 2004 - 09:49 #2
Jeg kan så gætte mig til at du sikkert vil spørge om hvordan du får den til at give fokus til den næste tekstboks:

switch(oct.Name) {
  case "oct1":
        oct2.Focus();
        break;
  case "oct2":
        oct3.Focus();
        break;
  case "oct3":
        oct4.Focus();
        break;
}
Avatar billede Syska Mester
05. november 2004 - 12:16 #3
Ja, fik også noget frisk luft her til morgen og kom til at tænke på det.

Jeg kigger på det og vender tilbage....

Har du noget info om at teste om det er et tal??
Avatar billede lifo Nybegynder
05. november 2004 - 12:41 #4
der er nogle lignende controller til ip på www.thecodeproject.com

om du mangler ideer så kan du lure dem af
Avatar billede lifo Nybegynder
05. november 2004 - 12:44 #5
Avatar billede Syska Mester
05. november 2004 - 13:17 #6
Jo, det ser jo meget godt ud, og tror jeg har fået svar på det hele, men mangler lige en ting.

Kan ikke lige helt gennemskue hans eksempel, da der er ok meget kode i hans. Men det ser da helt sikkert ud til at kunne nogle ting.

Spm:
Kan jeg tage input fra keyboard, teste på det, hvis det er tal, skriv det, ellers return false, og så skal den ikke skrive noget i mit felt. Men ellers smid tallet ned i min boks, men kun hvis min usercontrol er selected. Så resten af programmet jo stadig kan få tal som input..... nogen hint?
Avatar billede prec Nybegynder
05. november 2004 - 13:25 #7
til at teste hvad datatype det er har jeg denne funktion som jeg selv bruger:

public enum StringType { Numeric, Alphabetic, AlphaNumeric, Unknown }

public StringType CheckStringType(string s)
        {
            bool dig = false;
            bool let = false;
            bool other = false;
            for(int i = 0; i < s.Length; i++)
            {
                if(Char.IsDigit(s[i]))
                {
                    dig = true;
                }
                else if(Char.IsLetter(s[i]))
                {
                    let = true;
                }
                else
                {
                    other = true;
                }
            }
            if(dig && !let && !other)
            {
                return StringType.Numeric;
            }
            else if(!dig && let && !other)
            {
                return StringType.Alphabetic;
            }
            else if(dig && let && !other)
            {
                return StringType.AlphaNumeric;
            }
            else
            {
                return StringType.Unknown;
            }
        }

du retter bare til efter behov
Avatar billede Syska Mester
05. november 2004 - 13:46 #8
ja, men det er ikke helt der mit problem er endnu, men nok nyttigt alligevel.

Hvis jeg skal skrive en ip adresse vil jeg jo ikke have at der kommer bogstaver ind, derfor må jeg vel sku teste på hvad det er inden jeg skriver det ned i min textbox, ved ikke lige hvordan det kan lade sig gøre. Da jeg ikke helt kan gennemskue det eksempel du sendte 12:44:13.

Håber du er med på hvad jeg mener nu?
Avatar billede lifo Nybegynder
05. november 2004 - 13:48 #9
for kun at tillade tal bruger du on_keyPress eventet fo textboxen
der skriver du

if(!char.IsNumber(e.KeyChar))
{
    e.Handled=true;
}

så er det kun tal som slipper igennem
Avatar billede lifo Nybegynder
05. november 2004 - 13:49 #10
du kan også bruge denne her funktion til at teste om det er en ip

public bool isIp(string tekst)
{
  string ipRegEx =@"\b((25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\b";
  Regex regEx = new Regex(ipRegEx);
return regEx.IsMatch(tekst);
}
Avatar billede Syska Mester
05. november 2004 - 14:11 #11
private void oct1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if(!char.IsNumber(e.KeyChar))
    {
        e.Handled=true;
    }
}
giver følgende fejl:
D:\Documents and Settings\Administrator\My Documents\Visual Studio Projects\ComputerReg\ip.cs(168): 'System.Windows.Forms.KeyEventArgs' does not contain a definition for 'KeyChar'

Noget jeg gør forkert???

Jeg kan se at e. har KeyCode og KeyData
Avatar billede lifo Nybegynder
05. november 2004 - 14:21 #12
det var også keyPress og ikke keyUp jeg henviste til
Avatar billede Syska Mester
26. december 2005 - 19:30 #13
smider i et svar begge?
Avatar billede prec Nybegynder
27. december 2005 - 14:29 #14
Det er da noget af en gammel sag, men her er et svar :)
Avatar billede Syska Mester
27. december 2005 - 14:31 #15
ja, også derfor jeg synes den skulle lukkes :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester