So sorry für diese vage Frage ... seine tun meinen Kopf in ...C# Inkrement Dekrement Listenwerte
Im Grunde nur ein Testprojekt, verwenden Sie die Taste [+] eine Reihe von Werten in die Liste hinzufügen .... Die Pfeiltasten müssen nach oben und nach unten gehen. Die Listenwerte ...
Wenn der Liste ein neuer Wert hinzugefügt wird, wird "historySelected" zurückgesetzt, so dass der "Pfeil nach oben" immer selektiert das letzte Element, das zuerst in der Liste hinzugefügt wurde, und dann, wenn Sie es weiter gedrückt halten, geht es durch die Listenwerte zurück. Immer wenn die 'Pfeil nach unten' Taste gedrückt wird, muss zum vorherigen Wert in der Liste der Werte zurückgegangen werden. Zu keinem Zeitpunkt sollte eine Nach-oben-Taste, gefolgt von einer Nach-unten-Taste den gleichen Listenwert anzeigen und umgekehrt.
Das Verhalten, das ich suche, ist ähnlich wie eine Entwicklerkonsole mit einem Befehlsverlauf, wobei Pfeil nach oben geht weiter zurück in der Geschichte, und Down-Pfeil das Gegenteil.
Nochmals Entschuldigungen für den Code, es war durch so viele Teständerungen, derzeit funktioniert dies Pfeil nach oben zum Anfang des Wertes Liste, und dann mit dem Pfeil nach unten, um alle zurück zum höchsten Index Liste gehen .. Aber das Problem ist, wenn du halb durch die Liste gehst (oder zwischendurch), und vom Pfeil nach oben in den Pfeil nach unten gehst .. die Werte inkrementieren/dekrementieren nicht entsprechend ... Ich kann nicht scheinen Holen Sie sich die richtige Codelogik dafür.
Jede Hilfe oder Vorschläge danke.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ArrowKeys {
class Program {
//public static List<string> cmdHistory = new List<string>() { "1", "2", "3", "4", "5" };
public static List<string> cmdHistory = new List<string>();
public static int cmdHistoryCount = 0;
public static int historySelected = 0;
public static int num = 0;
public static string current = "";
public enum UpDown {
reset,
up,
down
};
public static UpDown LastUpDown;
static void Main(string[] args) {
bool running = true;
while (running) {
ConsoleKeyInfo kb = Console.ReadKey();
switch (kb.Key) {
case ConsoleKey.Escape:
Console.WriteLine("Exit");
running = false;
return;
case ConsoleKey.Add:
cmdHistory.Add(num.ToString());
cmdHistoryCount++;
historySelected= cmdHistoryCount;
LastUpDown = UpDown.reset;
Console.WriteLine(string.Join(" ", cmdHistory.Cast<string>().ToArray()));
num++;
break;
case ConsoleKey.UpArrow:
UpArrow();
LastUpDown = UpDown.up;
Console.WriteLine("UpArrow pressed");
Console.WriteLine(current);
break;
case ConsoleKey.DownArrow:
DownArrow();
LastUpDown = UpDown.down;
Console.WriteLine("DownArrow pressed");
Console.WriteLine(current);
break;
}
}
}
public static int Clamp(int value, int min, int max) {
return (value < min) ? min : (value > max) ? max : value;
}
public static void UpArrow() {
if (cmdHistoryCount != 0) {
if (LastUpDown == UpDown.down) {
if (historySelected - 1 == 0) {
return;
}
}
current = cmdHistory[historySelected - 1];
if (historySelected - 1 == 0) {
return;
}
historySelected--;
}
}
public static void DownArrow() {
if (cmdHistoryCount != 0) {
if (LastUpDown == UpDown.up) {
if (historySelected + 1 > cmdHistoryCount) {
return;
}
}
current = cmdHistory[historySelected - 1];
if (historySelected + 1 > cmdHistoryCount) {
return;
}
historySelected++;
}
}
}
}
'Zu keinem Zeitpunkt sollte eine Nach-oben-Taste, gefolgt von einer Nach-unten-Taste den gleichen Listenwert anzeigen, und umgekehrt ..' Ich verstehe nicht Ihr Radfahren Verhalten ... Wenn oben in der Geschichte und nach unten geht geht weiter (wie eine Konsole), wenn ich dann nach oben und dann nach unten drücke, gehe ich zwangsläufig auf den gleichen Wert zurück ... Was ist der Dreh? –
Diese beiden Aussagen scheinen völlig widersprüchlich zu sein: * "Immer, wenn die" Abwärtspfeil "-Taste gedrückt wird, muss auf den vorherigen Wert in der Werteliste zurückgegangen werden" "Zu keinem Zeitpunkt sollte eine Aufwärtspfeiltaste gefolgt von einem Abwärtspfeil folgen Taste zeigen den gleichen Listenwert "* –
0,1,2,3,4,5 Wenn der letzte angezeigte Wert 2 war.Dann sollte UpArrow zu 1 als nächstes gehen, wenn Sie stattdessen DownArrow gedrückt haben, dann sollte es zu 3 gehen. Wenn Sie UpArrow zum Start gedrückt haben, wo es wiederholt 0, und die DownArrow drücken sollte es gehen 1. Und wenn Sie weiter gedrückt DownArrow bis zum Ende 5, und dann gedrückt UpArrow sollte es gehen 4. Die Sachen, die ich versucht habe, war gerade nicht alles richtig. Entschuldigung für die Konfusion, der Code, den ich postete, war etwas kaputt. – NestedCodeblocksFTW