Jag sitter och försöker få till en kontrollfunktion som ska se till att mitt program inte stängs av om man skriver in ett mellanslag eller en bokstav där man ska skriva in en siffra. Nu vet jag inte om det är en Form eller en console applikation du tillverkar. Men när jag har en textbox i en form och jag bara vill tillåta siffror så brukar jag ta hand om KeyPress eventet och skriva såhär: Förresten, Jag håller med om att det kanske är lättare att kolla på ReadKey istället, men annars kan du skriva om som följer... Ser lite lättare ut... Vet inte om RegEx:en är rätt...men det är den säkert... Skulle själv nog skrivit @"^[0-9]$" Int.TryParse(..) Glömde säga att det är en Console Application. problemet är att det fortfarande går runt runt för mig om jag börjar med att skriva fel. Testa följande: Det fungerade. Tack så otroligt mycket.Problem med kontrollfunktion för kontroll av siffror...
Då det är många siffror som ska läggas in tyckte jag att det vore bättre med att ha en funktion som man kallar på isf att skriva ut kontrollfunktionen vid alla sifferinskrivningar.
Problemet blir att eftersom jag måste sätta boolens värde redan i början (därför har jag testat med att både använda bool och string i denna funktion. Denna kod gör att det hela tiden går runt och tar in siffra.
Jag har testat med en funktion i main som jag kallar till via:
Console.WriteLine("Var vänlig och skriv in {0}'s budgeterade antal kronor", projektnamn);
testasiffror();
beräknadbudget = Convert.ToInt32(test);
public static string testasiffror()
{
string test, tur;
test = "o";
tur = "f";
while (tur == "f")
{
test = Console.ReadLine();
if (!Regex.Match(test, @"^\d{}$").Success)
{
Console.WriteLine("Var vänlig och skriv in en korrekt siffra. ");
}
else
{
tur = "t";
return tur;
return test;
}
}
return test;
}//end public static string testasiffrorSv: Problem med kontrollfunktion för kontroll av siffror...
void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar < '0' || e.KeyChar > '9') && (int)e.KeyChar != 8) // 8 = back space
{
e.Handled = true;
}
}
Det som händer här är att alla siffror 0-9 släpps igenom och även back space.
Du kan också fånga upp speciella tangenttryckningar genom att använda Key Down eventet:
void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
{
}
}
Hoppas detta kan vara till hjälp.Sv:Problem med kontrollfunktion för kontroll av siffror...
Istället för ReadLine så kan du väl använda Console.Read() eller Console.ReadKey()
Read() ger dig en int som nog är ascii koden för tecknet som skrevs in.
ascii koderna för 0-9 är 48-57Sv: Problem med kontrollfunktion för kontroll av siffror...
<code>
public static string testasiffror()
{
string input;
while (true)
{
input= Console.ReadLine();
if (!Regex.Match(input, @"^\d{}$").Success)
Console.WriteLine("Var vänlig och skriv in en korrekt siffra. ");
else
return input;
}
}
</code>Sv: Problem med kontrollfunktion för kontroll av siffror...
Double.TryParse(..)Sv:Problem med kontrollfunktion för kontroll av siffror...
Nackdelen med att använda en ReadKey är att man ska kunna skriva in rätt stora siffror.
Sen förstod jag inte riktigt det hela med ascii koden.
Vänligen,
MariaSv:Problem med kontrollfunktion för kontroll av siffror...
sen är frågan hur jag får in detta tillbaka till main på ett bra sätt - vet inte om jag skriver helt fel, eller tänker fel men har suttit med denna kontrollfunktion i över två dygn så.
För låter jag det stå "static void Main(string[] args)"
så får jag "The name 'input' does not exist in the current context"
static void Main(string[] input)
{
int beräknadbudget;
Console.WriteLine("Var vänlig och skriv in projektets budgeterade antal kronor");
testasiffror();
Console.WriteLine("{0}", input);
}
så får jag
Var vänlig och skriv in projektets budgeterade antal kronor
test
Var vänlig och skriv in en korrekt siffra.
1
Ohanterat undantag: System.FormatException: Indatasträngen hade ett felaktigt format.
Sv: Problem med kontrollfunktion för kontroll av siffror...
<code>
static void Main(string[] input)
{
Console.WriteLine("Var vänlig och skriv in projektets budgeterade antal kronor");
int value = GetIntInput();
Console.WriteLine("{0}", value);
}
static int GetIntInput()
{
int returnValue;
string input;
while (true)
{
input = Console.ReadLine();
if (int.TryParse(input,ref returnValue))
return returnValue;
else
Console.WriteLine("Var vänlig och skriv in en korrekt siffra.");
}
}
</code>
Det bör funka...Sv:Problem med kontrollfunktion för kontroll av siffror...