The Jackal Skrevet 26. mai 2012 Del Skrevet 26. mai 2012 Litt kode på hvordan du kaller den osv hadde vært fint. ShowDialog er i utgangspunktet det du vil bruke vil jeg tro. Da blir formen liggende foran, som en dialogboks, hovedvinduet. Lenke til kommentar
Twinflower Skrevet 27. mai 2012 Forfatter Del Skrevet 27. mai 2012 Kode ja, god ide: private void aboutToolStripMenuItem1_Click(object sender, EventArgs e) { AboutBox1.ActiveForm.Show(); } Denne saken stammer fra "about"-knappen i menystripen på toppen av applikasjonen. AboutBox1 er noe som er laget vha knapper og designelementer, så jeg har ikke rørt noe i koden ettersom jeg ikke aner hva jeg skal der. Jeg har uansett 3 "aboutbox1"-greier i Solution Explorer: AboutBox1.cs -AboutBox1.Designer.cs -AboutBox1.resx Trenger jeg å legge til kode i noen av de for å vise aboutboxen? Lenke til kommentar
Twinflower Skrevet 27. mai 2012 Forfatter Del Skrevet 27. mai 2012 Ny utfordring: Jeg får inn en IP som string: 10.0.0.18 f.eks Jeg vil splitte den opp slik at jeg får 10 i en tekstboks, 0 i neste tekstboks osv. Jeg har prøvd litt forskjellig med list og array, men jeg får det ikke helt til fordi jeg ikke aner hva jeg gjør. Forsøk 1 public string[] IPparts(string IP) { string[] words = IP.Split('.'); return words[]; } Forsøk 2 List<string> IPsegs = IP.Split('.').ToList(); return ListToString[].IPsegs; Så, hvordan får jeg en slags container med "bitene" mine i, og hvordan får jeg hentet de ut? Lenke til kommentar
Valkyrex Skrevet 27. mai 2012 Del Skrevet 27. mai 2012 (endret) IP adresser er 32bit, så er bare å slenge dem inn i en 32bits unsigned int. Deretter bruke bitwise operander til å trekke ut data. Enkelt forklart hvis det er nytt da: Data i variablene er jo bare bits egentlig, så når du har et 8 bits tall (f.eks et standard ASCII tegn) så er dette lagret i en char variabel (som da også bare bruker 8 bit). En IP bruker totalt 32 unsigned (altså bare positive tall) for å lagre nødvendig informasjon. hver "bolk" som er adskilt mellom punktumene er en "octet" som er fra 0 til 255 (256 mulige) da en 8 bits variabel, og man har 4 av dem, så da 32 totalt. Du kunne også ha laget en struct, med en 8 bits int eller en char til å holde på IP verdiene. // Er C++ kode da, men ja =) unsinged int IP = 167772178; // = 10.0.0.18, i 32bits form, ikke stykket opp std::cout << (IP >> 24) << "." << ((IP & 0xFFFFFF) >> 16) << "." << ((IP & 0xFFFF) >> 8) << "." << (IP & 0xFF) << "\n"; // Dette vil da skrive ut: 10.0.0.18 Så når man jobber med en IP addresse (hvertfall slik det gjøres på et litt lavere nivå enn mye av C# kodinga her er) så behandler man bare addressen som en variablen (en lang ramse av 1'ere og nuller) 10.0.0.18 == 167772178 == 1010000000000000000000010010 == 00001010.00000000.00000000.00010010 = 10.0.0.18 Det er også slik man regner seg frem til hva netverksadressen til det subnetet man er på er, via å gjøre logisk "OG" funksjon av netverksmaska og IPen du har. f.eks 127.16.32.38 & 255.255.192.0 == 2131763238 & 4294950912 = 2131755008 = 127.16.0.0 Men ja, for å ikke side tracke for mye. Ta den IP'n du får inn, gjør om til det tallet du skal ha, trekk så ut hver verdi til sin tekst boks. IKKE den letteste metoden, men hvis du skal gjøre noe mer enn å bare vise IP'n (da mtp at du kanskje har noe mer funksjonalitet enn det i programmet) så kan det være greit å starte tidlig med å implementere det på en brukanes måte, enn å måte gjøre den tekst->tall konverteringa hver gang senere. P.s. kan hende noen utregninger er feil xD Endret 27. mai 2012 av Valkyrex Lenke til kommentar
Twinflower Skrevet 27. mai 2012 Forfatter Del Skrevet 27. mai 2012 OK, jeg skjønner hva du mener og jeg ser fordelene med det. Jeg trenger dog noen flere dytt i riktig retning. Først hvordan man gjør om IPen til en unsigned sak, deretter hva betyr << og >> ? Lenke til kommentar
GeirGrusom Skrevet 28. mai 2012 Del Skrevet 28. mai 2012 Nå er det innebygget støtte for håndtering av IP adresser i .NET (System.Net.IPEndPoint) << og >> er binær bitwise shift. De flytter bitmønsteret til venstre og høyre. Dersom du har en IP-adresse, 192.168.0.1 som blir 0xC0A80001 i heksadesimaler, så kan du hente ut ett og et felt ved å bruke binær and operatøren &. Men det du gjør da er å sette alle de andre feltene tomme, så man bitshifter for å få den virkelige verdien 0xC0A80001 & 0xFF000000 = 0xC0000000 >> 24 (3 oktetter til høyre) = 0x000000C0 Lenke til kommentar
Valkyrex Skrevet 28. mai 2012 Del Skrevet 28. mai 2012 uint IP, temp_octet; // unsigned int for IPen og en temp variabel int i, j; // Holder på for-løkke iteratorer // For å sjekke om det er en gyldig IP string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$"; // Ny regex Regex check = new Regex(pattern); // Sjekker om strengen er tom... if (ip_streng == "") { Console.WriteLine("ERROR"); } // Sjekker om strengen matcher else if (check.IsMatch(ip_streng, 0) { // Splitter opp i en array string[] s_octets = ip_streng.Split(' '); IP = 0; // Looper igjennom arrayen og litt mer // "i" går 0,1,2,3 // "j" går 6,4,2,0 for (i = 0, j = 6; i < 4, j >= 0; i++, j-=2) { // Gjør om en streng verdi til unsigned int temp_octet.Convert.ToUint32(s_octet[i]); // Legger inn i IP variabelen. // Her så taes "temp_octet" og leftshift'es J*4 ganger // Leftshift verdiene blir da: 24, 16, 8, 0 IP += (temp_octet << (j * 4)); } } else { Console.WriteLine("ERROR"); } Får beklage noen syntaktiske feil eller om det finnes bedre måter å løse det på, C# er ikke et språk jeg har noe erfaring med. ">>" og "<<" er 2 ting i C#. I den forstand hvor den brukes i sammenheng med å skrive til / fra fil er det for å "sende data dit", når det brukes i en aritmetisk sammenheng, er det for operasjonene: leftshift og rightshift. Nå er det innebygget støtte for håndtering av IP adresser i .NET (System.Net.IPEndPoint) << og >> er binær bitwise shift. De flytter bitmønsteret til venstre og høyre. Dersom du har en IP-adresse, 192.168.0.1 som blir 0xC0A80001 i heksadesimaler, så kan du hente ut ett og et felt ved å bruke binær and operatøren &. Men det du gjør da er å sette alle de andre feltene tomme, så man bitshifter for å få den virkelige verdien 0xC0A80001 & 0xFF000000 = 0xC0000000 >> 24 (3 oktetter til høyre) = 0x000000C0 Hehe, der kom svaret jeg tenkte kom, at det var noe eget i C# for å håndtere dette. Well well, fint måte å starte dagen på Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå