tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
5809
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ExtremeSnail ExtremeSnail ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Hamburg
    Beiträge
    157
    Hallo,

    ich bin in C# total neu und habe versucht mir meine Antwort hier in Tutorials oder im Forum zu suchen leider ohne Erfolg.

    Also mein Problem:
    Ich möchte dem Benutzer eine Auswahl vorgeben und er darf dann nur mit den Zahlen 0,1 und 2 wählen und die Eingabe soll nicht auf ein Enter warten. Sollte nicht 0,1, oder 2 angegeben werden so soll nichts passieren.

    Weiß da jemand Rat?

    Mein Code
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    using System;
     
    namespace ConsoleApplication1
    {
        class Class1
        {
            static void Main(string[] args)
            {
                
                int iAuswahl = 0;
     
                Console.WriteLine("\tHallo, wie geht es Dir?\n");
                Console.WriteLine("\tSuper\t(0)");
                Console.WriteLine("\tGeht so\t(1)");
                Console.WriteLine("\tSchlecht(2)\n");
                Console.Write("\tEingabe: ");
                iAuswahl = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine(iAuswahl);
            }
        }
    }

    Ich hab auch bereits versucht nur Console.Read() zu benutzen, aber da schmeißt er mir eine total falsche Zahl wieder aus.
     

  2. #2
    Registriert seit
    Sep 2004
    Ort
    Untergruppenbach
    Beiträge
    381
    Hallo.

    Ich weiss nicht, ob es genau das ist, was du suchst, aber hier mal ein Vorschlag:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    ...
    bool weiter = true;
    ...
    while(weiter)
    {
        if(e.KeyChar == '0')
        {
            /* Hier behandelst du die Eingabe von '0' */
            weiter = false;
        }
        if(e.KeyChar == '1')
        {
            /* Hier behandelst du die Eingabe von '1' */
            weiter = false;
        }
        if(e.KeyChar == '2')
        {
            /* Hier behandelst du die Eingabe von '2' */
            weiter = false;
        }
        else
        {
            MessageBox.Show("Falsche Eingabe.");
            /* weiterer Code, z.B. eine Ausnahme werfen */
        }
    }
    ...
    Ich hoffe mal, das gibt dir zumindest einen Denkansatz;

    Gruß, Niko

    <edit>
    Ich sollte wohl dazu sagen, dass ich das so bei Windows.Forms mache...
    Für Konsolenanwendungen muss ich nochmal kurz mein Codebuch konsultieren.
    Werde das dann in einem 2.ten "edit" posten.
    </edit>

    <edit2>
    Also alles, was ich dazu gefunden habe, wäre "Console.In.Peek", siehe hier, wenn du auf Bearbeiten->Suchen(aktuelle Seite)->"Console.In.Peek" gehst, genauer gesagt zum Beitrag eines gewissen Jarod_24.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    Dim intIn As Integer, bChar As Boolean = False
     
    'Do loop until we got a key
    intIn = Console.In.Peek()
    If (intIn <> -1) Then bChar = True
    'Loop Until bChar
     
    Select Case intIn
        Case Keys.F1
        Call about()
    End Select

    In C# also in etwa so(wenn ich richtig übersetzt habe):
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    int intIn = 0;
    bool bChar = False;
     
    /* Do loop until we got a key */
    intIn = Console.In.Peek()
    If (intIn != -1) 
    {
        bChar = True;
    }
    /* Loop Until bChar */
     
    switch (intIn):
    {
        Case Keys.0: {tuEtwasWenn0();}
        Case Keys.1: {tuEtwasWenn1();}
        Case Keys.2: {tuEtwasWenn2();}
        ...    
    }
    </edit2>
    Geändert von vault-tec (27.10.04 um 09:59 Uhr)
     
    :. Sollte mein Beitrag geholfen haben, würde ich mich über eine entsprechende Bewertung freuen.

    SYNCING.NET - Dateien und Outlook Synchronisieren leicht gemacht. >> Jetzt testen

    --- Toleranz darf nur eine vorübergehende Gesinnung sein, die zur Anerkennung führen muss. Dulden heißt beleidigen. --- (Johann Wolfgang von Goethe)

    moneypenny - das mobile büro

  3. #3
    Avatar von rauchmelder
    rauchmelder rauchmelder ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Ort
    Österreich (Wien)
    Beiträge
    43
    Also hab das grad auch probiert, weil ich sowas schon lange gesucht habe, nur funkt das nicht so ganz. Weil er lässt mich "x" Zeichen einlesen und wartet auf ein Enter, und gibt jedes mal 49 aus. Ich glaube aber hier wird benötigt eine Eingabe von genau 1nem Zeichen, ohne einer eingabe von Enter.

    mfg Rauchmelder
     

  4. #4
    Registriert seit
    Sep 2004
    Ort
    Untergruppenbach
    Beiträge
    381
    Hallo.

    Ich habe mir auch noch mal genauer Gedanken darüber gemacht.
    Also in C kenne ich eine Funktion namens "getchar", mit welcher man einzelne Zeichen von der Tastatur übernimmt.
    In C# bzw. .NET ist mir so eine Methode allerdings nicht bekannt.
    Gestern erst habe ich noch ein wenig rumprobiert mit "Console.In.Peek" und anderen Membern von Console, bekam aber nicht das richtige Ergebnis (Idee war, einen Input-Stream für genau ein Zeichen zu öffnen, dies zu übernehmen und ihn dann wieder zu schließen);
    eine Bestätigung mit Enter wurde aber leider immer verlangt.

    Tut mir leid ExtremeSnail, aber ich fürchte ich kann dir bei Konsolenanwendungen da nicht weiterhelfen. (Für Windows.Forms siehe Lösung in meinem oberen Post)

    Gruß, Niko
     
    :. Sollte mein Beitrag geholfen haben, würde ich mich über eine entsprechende Bewertung freuen.

    SYNCING.NET - Dateien und Outlook Synchronisieren leicht gemacht. >> Jetzt testen

    --- Toleranz darf nur eine vorübergehende Gesinnung sein, die zur Anerkennung führen muss. Dulden heißt beleidigen. --- (Johann Wolfgang von Goethe)

    moneypenny - das mobile büro

  5. #5
    ExtremeSnail ExtremeSnail ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Hamburg
    Beiträge
    157
    Ich bin bisher leider aus Zeitgründen nicht zum Testen gekommen (Freundin und so *gg*).

    Totzdem vielen Dank für den Tipp, ich werde noch ein wenig weiter suchen.

    Auf jedenfall möchte ich die Eingabe nicht mit Enter bestätigen und in C++ ist es getch() ist mir soweit bekannt, aber ich bin in C# blutiger Anfänger und es gibt schon so einige Unterschiede....

    Aber ich bin für Tipps weiterhin offen, danke.
     

  6. #6
    erhardt erhardt ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Augsburg
    Beiträge
    154
    Hab hier was in den Google-Groups gefunden
     

  7. #7
    ExtremeSnail ExtremeSnail ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Hamburg
    Beiträge
    157
    Das funktioniert bei mir leider so nicht. Kann mir das sonst noch jemand kurz erklären, falls es bei ihm funktioniert.

    Komme bei dem Problem leider echt alleine nicht weiter...

    Danke!

    Hat noch jemand eine Idee dazu?
    Geändert von ExtremeSnail (03.11.04 um 10:08 Uhr)
     

  8. #8
    MistaLan MistaLan ist offline Grünschnabel
    Registriert seit
    Nov 2004
    Beiträge
    3
    Beim neuen .NET 2.0 soll soweit ich weiß eine Methode Console.ReadKey implementiert werden, die genau ein Zeichen von der Tastatur liest und kein Enter erwartet.
    Ist aber nur Halbwissen.
    Du kansnt dir die pre Version Visual Studio 2005 C# light downloaden, da sollte das schon drin sein.
    Hier gibts die Beta:
    http://go.microsoft.com/fwlink/?LinkId=31591
    Geändert von MistaLan (28.11.04 um 21:49 Uhr)
     

  9. #9
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Ist schon Krass wie man von der Zeicheneingabe zur Tastatur-Zeichen-Abfrage kommt.

    Hier kriegt man keinen rauchenden Kopf wenn es um Zeichenüberprüfung geht.
    (Das Validating Event nach jeder Zeicheneingabe auslösen.)

    MFG cosmo
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

Ähnliche Themen

  1. [C] Abbrechen wenn keine Eingabe
    Von myhonor im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 16.12.09, 12:19
  2. Einlesen und Eingabe prüfen
    Von StraboN im Forum Java
    Antworten: 6
    Letzter Beitrag: 09.01.09, 20:08
  3. [c] eingabe nach zeit abbrechen
    Von Pherseus im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 09.04.07, 12:49
  4. [MX] einzelnes Zeichen ersetzen
    Von alma im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 30.04.04, 05:51
  5. TSUME Eingabe im PS7 (Zeichen)
    Von mariomartic im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 21.10.03, 21:45