
это то, как выглядит мой графический интерфейс. в форме загрузки отсортированный список отображает три случайно выбранных ключа на этикетках. затем пользователь выбирает соответствующее значение, чтобы сопоставить его с ключом.
это то, с чем я борюсь! Ниже показано, как далеко я зашел. пожалуйста помоги !!
private void Form1_Load(object sender, EventArgs e)
{
//create the sorted list and add items
SortedList<string,string> sl = new SortedList<string,string>();
sl.Add("PicknPay", "jam");
sl.Add("Spar", "bread");
sl.Add("Checkers", "rice");
sl.Add("Shoprite", "potato");
sl.Add("Cambridge", "spinash");
//declare random variable
var rnd = new Random();
var shuffledKeys = sl.Keys.OrderBy(key => rnd.Next()).ToList();
lbl1.Text = shuffledKeys[0];
lbl2.Text = shuffledKeys[1];
lbl3.Text = shuffledKeys[2];
}
Вот как мои текущие мысли помогают мне сопоставить вывод метки с выбором поля со списком, чтобы подтвердить, что на самом деле это действительная пара значений ключа
private void btnmatch_Click(object sender, EventArgs e)
{
int count = 0;
//match
if (sl.keys.Containskey(shuffledKeys[0]) || sl.value.Containsvalue(cb1.SelectedValue))
{
count++; //score
}
else
{
//Do nothing
}
}
sl - это имя отсортированного списка, объявленного в загрузке страницы
Вы имеете в виду загрузку формы. Как я уже сказал, он объявляется локальным для этого метода. «Sl», на который вы ссылаетесь в методе щелчка, представляет собой другой список.
Не было бы проще просто выбрать 3 случайных индекса в отсортированном массиве, заполнить метки значениями в этих индексах и сопоставить их позже по ключам?
@VictorHavin покажи мне, потому что я вообще не мог заставить это работать на меня.





Как насчет чего-то вроде кода ниже? Неясно, должны ли ключи в ярлыках быть уникальными. Если это так, вам следует добавить еще один цикл для выбора уникального случайного числа.
public partial class Form1 : Form
{
private Label[] labels;
private ComboBox[] combos;
private Random r = new Random();
SortedList<string, string> sl = new SortedList<string, string>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
labels = new Label[]{ label1, label2, label3 };
combos = new ComboBox[]{ comboBox1, comboBox2, comboBox3 };
sl.Add("Key1", "Value1");
sl.Add("Key2", "Value2");
sl.Add("Key3", "Value3");
sl.Add("Key4", "Value4");
sl.Add("Key5", "Value5");
HashSet<int> used = new HashSet<int>();
foreach (Label l in labels)
{
int n = r.Next(0, sl.Count);
while(used.Contains(n))
n = r.Next(0, sl.Count);
used.Add(n);
l.Text = sl.ElementAt(n).Key;
}
foreach(ComboBox combo in combos)
{
foreach(string s in sl.Values)
{
combo.Items.Add(s);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
int nCorrect = 0;
for(int n = 0; n < labels.Length; n++)
{
if (combos[n].Text == sl[labels[n].Text])
{
nCorrect++;
}
}
labelScore.Text = nCorrect.ToString();
}
}
На всякий случай: я отредактировал этот код, чтобы выбрать только уникальные ключи.
true ключи в ярлыках должны быть уникальными ... вопрос, почему поле со списком создает дубликаты значений при загрузке.
Спасибо . Вы были достаточно любезны, чтобы помочь с проблемой, которая была у меня на руках в течение недели. Будучи студентом, я научился простоте из вашего кода.
Я изменил код, чтобы использовать только уникальные ключи. Что вы подразумеваете под «дубликатами» в полях со списком? Если вы имеете в виду, что значения поля со списком должны быть случайными (не в том порядке, в котором они были добавлены в отсортированный список), вы можете перемешать их. В общем, рандомизации только ключей должно быть достаточно, так как это делает ключи по форме отличной от значений.
Я рад, если это помогло. Удачи в учебе.
Откуда это "сл"? Он был объявлен локальным для метода загрузки.