ОК, давайте начнем с первого.Если вы используете форму окна, вы можете настроить вывод проекта на консоль вместе с формой окна.
Это достигается с помощью:
Щелкните правой кнопкой мыши свой проект -> Выбрать свойства. Измените тип вывода на Консольное приложение.
![enter image description here](https://i.stack.imgur.com/Es8SP.jpg)
Как получить массив, который использует строку в качестве индекса?Просто используйте словарь.
Dictionary<string, decimal> number = new Dictionary<string, decimal>();
number["010"] = 0.10m;
number["020"] = 0.20m;
number["030"] = 0.30m;
number["040"] = 0.40m;
number["050"] = 0.50m;
this.myListBox.Items.Add(number["010"]);
this.myListBox.Items.Add(number["020"]);
this.myListBox.Items.Add(number["030"]);
this.myListBox.Items.Add(number["040"]);
this.myListBox.Items.Add(number["050"]);
Последний пункт очень прост.Присоедините событие SelectIndexChanged к вашему списку и следите за выбранным элементом:
private void myListBox_SelectedIndexChanged(object sender, EventArgs e)
{
var item = this.myListBox.SelectedItem.ToString();
if(!tracking.Select(x=> x.Key == item).Any())
{
tracking.Add(new KeyValuePair<string, int>(item, 1));
Console.WriteLine(item + " has been selected once");
}
else
{
var currentItem = tracking.SingleOrDefault(x => x.Key == item);
var value = currentItem.Value;
tracking.Remove(currentItem);
value++;
tracking.Add(new KeyValuePair<string, int>(item, value));
Console.Clear();
Console.WriteLine(item + " has been selected " + value + " times");
}
}
Переменная отслеживания была объявлена следующим образом:
public partial class Form1 : Form
{
List<KeyValuePair<string, int>> tracking = new List<KeyValuePair<string, int>>();
public Form1()
{
InitializeComponent();
Dictionary<string, decimal> number = new Dictionary<string, decimal>();
number["010"] = 0.10m;
number["020"] = 0.20m;
EDIT
Поскольку словарь не может быть использован, а приложение - WPF, вот еще одно решение.
Опять же, вы можете использовать первый шаг, показанный для получения решения WPF с выводом консоли: щелкните правой кнопкой мыши ваш проект-> Выберите Свойства. Измените тип вывода на Консольное приложение.
Чтобы иметь коллекцию, которая использует объект в качестве индекса, нужно использовать Hashtable.
Вот ваш основной:
public partial class MainWindow : Window
{
List<KeyValuePair<string, int>> tracking = new List<KeyValuePair<string, int>>();
public MainWindow()
{
InitializeComponent();
Hashtable numbers = new Hashtable();
numbers.Add("010", 0.10m);
numbers.Add("020", 0.20m);
numbers.Add("030", 0.30m);
numbers.Add("040", 0.40m);
numbers.Add("050", 0.50m);
List<decimal> items = new List<decimal>();
items.Add(Convert.ToDecimal(numbers["010"]));
items.Add(Convert.ToDecimal(numbers["020"]));
items.Add(Convert.ToDecimal(numbers["030"]));
items.Add(Convert.ToDecimal(numbers["040"]));
items.Add(Convert.ToDecimal(numbers["050"]));
lbTodoList.ItemsSource = items;
}
private void lbTodoList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var item = this.lbTodoList.SelectedItem.ToString();
if (!tracking.Select(x => x.Key == item).Any())
{
tracking.Add(new KeyValuePair<string, int>(item, 1));
Console.WriteLine(item + " has been selected once");
}
else
{
var currentItem = tracking.SingleOrDefault(x => x.Key == item);
var value = currentItem.Value;
tracking.Remove(currentItem);
value++;
tracking.Add(new KeyValuePair<string, int>(item, value));
Console.Clear();
Console.WriteLine(item + " has been selected " + value + " times");
}
}
}
Ваш XAML должен быть таким простым:
<Grid>
<ListBox Name="lbTodoList" HorizontalAlignment="Left" Height="154" Margin="145,56,0,0" VerticalAlignment="Top" Width="277" SelectionChanged="lbTodoList_SelectionChanged"/>
</Grid>
Запомните, чтобы прикрепить событие SelectIndexChanged к вашему списку и отслеживать выбранный элемент.