2017-04-24 3 views
-1

Ich frage mich, wie wäre es besser, ein System zum Durchsuchen einer Liste von Zeichenfolgen mit den Pfeiltasten zu implementieren? Bis jetzt habe ich eine bevölkerte Liste mit ein paar Testzeichen hinzugefügt wie foo, goo, hoo und jetzt möchte ich eine TextBox haben, wo ich sie mit den Pfeiltasten nach oben und unten durchsuchen kann. HierGehen Sie durch eine Liste von Zeichenfolgen in C#?

ist ein bisschen der Code, den ich habe:

List<String> reload; 

private void inputBox_KeyDown(object sender, KeyEventArgs e){ 
     int x = 0; 
     reload.item(x);//this is my bogus guess on how it should be done 
      try{ 
       if (e.KeyCode == Keys.Enter){ 
        itemHandler(); 
        inputBox.Clear(); 
       } 

       if (e.KeyCode == Keys.Up){ 
        inputBox.Text = reload().item(x+1); //again bogus 
        x++; 
       } 

       if (e.KeyCode == Keys.Down)(
        inputBox.Text = reload().item(x-1); //again bogus 
        x--; 
       } 

       else {} 
      } 

      catch(Exception ex) 
      { 
       rtbDisplay.AppendText("Error:" + ex); 
      } 
     } 
+0

können Sie nicht verwenden, Drop-Down-oder Combobox für das? – Simsons

+0

Ich kann tun, was ich will, aber ich möchte lernen, wie man mit Listen arbeitet, wie ich sie nie zuvor überraschend verwendet hatte ... –

+0

'reload' ist ein schlechter Objektname –

Antwort

1

x sollte außerhalb die Methode definiert werden, weil Sie es nicht wollen, neu initialisiert auf 0 wird jedes Mal die Methode aufgerufen. Wenn Sie mit Listen nicht vertraut sind, empfehle ich Ihnen, zuerst MSDN zu lesen.

Grundsätzlich Sie es fast bekam:

int x = 0; 
private void inputBox_KeyDown(object sender, KeyEventArgs e){ 
    try{ 
     if (e.KeyCode == Keys.Enter){ 
      itemHandler(); 
      inputBox.Clear(); 
     } 

     if (e.KeyCode == Keys.Up){ 
      inputBox.Text = reload[x + 1]; 
      x++; 
     } 

     if (e.KeyCode == Keys.Down)(
      inputBox.Text = reload[x - 1]; 
      x--; 
     } 

     else {} 
    } 

     catch(Exception ex) 
     { 
      rtbDisplay.Text = "Error:" + ex.ToString(); 
     } 
    } 
1

Zuerst Sie die Indexvariable außerhalb des Verfahrens erklärt brauchen würde, sonst wird es mit 0 jedes Mal zu starten. Zweitens kann eine Liste indiziert werden mit dem [ ] Operator

int index = 0; 

private void inputBox_KeyDown(object sender, KeyEventArgs e) 
{ 


    if (e.KeyCode == Keys.Enter){ 
     itemHandler(); 
     inputBox.Clear(); 
    } 

    // you should check here whether your index is between 0 and reload.Count-1 
    if (reload.Count > 0 && index > 1 && index < reload.Count -1){ 

     if (e.KeyCode == Keys.Up){ 
      x++; 
     } 

     if (e.KeyCode == Keys.Down)(
      x--; 
     } 

     inputBox.Text = reload[index]; 

    }  
} 
Verwandte Themen