Единственный способ сделать это (кроме гениальной идеи формы BalusC!) - добавить в кнопку событие JavaScript onclick
, что не очень удобно для доступности.
Рассматривали ли вы стиль обычной ссылки, как кнопки? Вы не можете получить кнопки для конкретной ОС, но это лучший способ для ИМО.
Проблема в том, что словарь не отсортирован. Вам нужен SortedList , который позволяет получать значения по индексу, а также по ключу, хотя вам может потребоваться указать собственный компаратор в конструкторе, чтобы получить желаемую сортировку. Затем вы можете получить доступ к упорядоченному списку ключей и значений и при необходимости использовать различные комбинации методов IndexOfKey / IndexOfValue.
вот так:
int n = 0;
int nthValue = cipher[cipher.Keys.ToList()[n]];
обратите внимание, что вам также понадобится ссылка на Linq вверху страницы ...
using System.Linq;
Просто чтобы придерживаться исходной спецификации Словаря, я вставил код и придумал:
Dictionary<string, string> d = new Dictionary<string, string>();
d.Add("a", "apple");
d.Add("b", "ball");
d.Add("c", "cat");
d.Add("d", "dog");
int t = 0;
foreach (string s in d.Values)
{
t++;
if (t == 2) Console.WriteLine(s);
}
, и похоже, что второй элемент («мяч») записывается в консоль с повторяемостью . Если вы обернули его в вызов метода для получения n-го элемента, он, вероятно, сработает. Хотя это довольно некрасиво. Если бы вы могли вместо этого сделать SortedList,
Вам действительно нужно искать ключ? Если нет, используйте List
(или еще лучше, создайте тип для инкапсуляции char и int).
Словари не сортируются по своей сути - реализации словаря которые отсортированы в .NET, сортируются по ключу, а не по порядку вставки.
Если вам нужно получить доступ к коллекции как по порядку вставки, так и по ключу, я бы рекомендовал инкапсулировать список и словарь в единственный тип коллекции.
В качестве альтернативы, если список будет довольно коротким, разрешите поиск по индексу, просто выполнив линейный поиск ...