2013-07-09 3 views
0
public void checkInt(Scanner MemberNrSC) 
    { 
     MemberNrSC = new Scanner(txtMemberNr.getText()); 
     while (!MemberNrSC.hasNextInt()) 
     { 
      string correctedMemberNr = Interaction.InputBox(null,"Medlemsnummer skal være et nummer, indtast det rigtige"); 

      if (correctedMemberNr == null) 
      { 
       MemberNrCancelled = true; 
       break; 
      } 
      txtMemberNr.setText(correctedMemberNr); 

      MemberNrSC = new Scanner(txtMemberNr.getText()); 
      MemberNrCancelled = false; 
     } 
    } 

Это моя ява шашка, потому что если есть только цифры в текстовом поле ..Java класс сканера - Что делать в C#

Но нет сканера в C# - как бы я получить это метод преобразован правильно? У меня есть другие методы, требующие класса сканера, но я надеялся, что смогу здесь помочь.

BTW: Я использую визуальный базовый входной ящик - поскольку я не знаю, есть ли аналогичный способ в C#.

Заранее спасибо ;-)

/Rasmus Дания

+0

пост по теме [здесь] (https://stackoverflow.com/q/722270/465053). – RBT

ответ

0
string Str = txtMemberNr.Text.Trim(); 

      double Num; 

      bool isNum = double.TryParse(Str, out Num); 

      if (isNum) 
      { 
       // CODE IS HERE 
      } 
      else 
      { 
       MessageBox.Show("Brugernavn skal kun indeholde tal, prøv igen!", "advarsel", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 

Это был самый простой способ - проверка есть ли int/string в t поле extbox. Я надеялся, что вы или кто-то, у кого есть возможность решить эту проблему.

Благодарим за помощь, но я не мог заставить ее работать должным образом - хотя было хорошо использовать сканер .. спасибо.

0

Попробуйте это возможно

class Scanner : System.IO.StringReader 
{ 
    string currentWord; 

    public Scanner(string source) : base(source) 
    { 
    readNextWord(); 
    } 

    private void readNextWord() 
    { 
    System.Text.StringBuilder sb = new StringBuilder(); 
    char nextChar; 
    int next; 
    do 
    { 
     next = this.Read(); 
     if (next < 0) 
      break; 
     nextChar = (char)next; 
     if (char.IsWhiteSpace(nextChar)) 
      break; 
     sb.Append(nextChar); 
    } while (true); 
    while((this.Peek() >= 0) && (char.IsWhiteSpace((char)this.Peek()))) 
     this.Read(); 
    if (sb.Length > 0) 
     currentWord = sb.ToString(); 
    else 
     currentWord = null; 
    } 

    public bool hasNextInt() 
    { 
    if (currentWord == null) 
     return false; 
    int dummy; 
    return int.TryParse(currentWord, out dummy); 
    } 

    public int nextInt() 
    { 
    try 
    { 
     return int.Parse(currentWord); 
    } 
    finally 
    { 
     readNextWord(); 
    } 
    } 

    public bool hasNextDouble() 
    { 
    if (currentWord == null) 
     return false; 
    double dummy; 
    return double.TryParse(currentWord, out dummy); 
    } 

    public double nextDouble() 
    { 
    try 
    { 
     return double.Parse(currentWord); 
    } 
    finally 
    { 
     readNextWord(); 
    } 
    } 

    public bool hasNext() 
    { 
    return currentWord != null; 
    } 
} 

Источник: https://stackoverflow.com/a/722524/1714342

+0

Прошу прощения .. теперь, когда давно изменилось с 7 лет обучения Java, я студент-информатик, теперь меняющийся на C# после летних каникул. Но мои 18 строк метода в java - это что на самом деле почти 80 строк i C# .. или это просто «общий» checker. У меня немного сложно увидеть код .. ;-( –

+2

Этот код представляет собой реализацию Сканера в C#, вам не нужно ставить это в вашем методе, это будет в другом файле, и вам нужно ссылаться на него так же, как вы указали Сканер в Java (такое же использование). Если у вас есть другие вопросы, не стесняйтесь спрашивать :) – wudzik

0

Как насчет

public static IEnumerable<string> Scanner(this string tgt, char delim) 
    { 
     var sb = new StringBuilder(); 
     foreach (var c in tgt) 
     { 
      if (c == delim) 
      { 
       yield return sb.ToString(); 
       sb.Clear(); 
      } 
      else sb.Append(c); 
     } 
    } 
Смежные вопросы