Я пытаюсь добавить новое значение словаря и добавить новый пользовательский элемент управления в макет потока.Но нажатие кнопки «Добавить элемент управления» вызывает исключение инициализатора с внутренним исключением, таким как «Ключ уже добавлен».Я не знаю полного исключения, потому что у меня возникают трудности с поиском, как открыть всплывающую ошибку, которая обычно появляется в Visual Studio.
Уже настроен цикл, чтобы проверить, добавлен ли ключ в словарь, иесли это так, измените ключ (как показано в блоке кода).Также попытался очистить список элементов управления макетом потока.(не внесено никаких изменений в ошибку)
Функция, в которой выдается ошибка:
/// <summary>
/// Create a new key propertie set.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonAddKey_Click(object sender, EventArgs e)
{
// Create new UI key component in the flow layout.
KeyPropertiesCtrl inputKeyCtrl = new KeyPropertiesCtrl();
flowLayoutKeys.Controls.Add(inputKeyCtrl);
Console.WriteLine("inputKeyCtrl " + inputKeyCtrl.Name + " parent " + inputKeyCtrl.Parent.Name);
// Create new data input key.
CustomInputKey newKey = new CustomInputKey();
newKey.Activation.InputKey = new Interception();
Console.WriteLine("newKey " + newKey.Activation.InputKey);
// Get a key binding from the user.
try
{
Form1.Context = InterceptionDriver.CreateContext();
InterceptionDriver.SetFilter(Form1.Context, InterceptionDriver.IsKeyboard, (Int32)KeyboardFilterMode.All);
InterceptionDriver.SetFilter(Form1.Context, InterceptionDriver.IsMouse, (Int32)MouseFilterMode.All);
Form1.InterceptOnce(Form1.Context, out newKey.Activation.InputKey.DeviceId, out newKey.Activation.InputKey.TheStroke);
InterceptionDriver.DestroyContext(Form1.Context);
// Change the key bind in UI text.
if (newKey.Activation.InputKey.TheStroke.Key.State != 0)
inputKeyCtrl.button1.Text = newKey.Activation.InputKey.TheStroke.Key.Code.ToString();
else
inputKeyCtrl.button1.Text = newKey.Activation.InputKey.TheStroke.Mouse.State.ToString();
}
catch (Exception excp)
{ Console.WriteLine(excp); }
// Set the key bind in data list.
string name = inputKeyCtrl.Name;
byte attempts = 0;
while (Form1.CurrentSelections.SelectedPreset.GetCustomKeys.ContainsKey(name))
{
if (attempts > 50)
{
break;
}
attempts++;
name += attempts;
}
Console.WriteLine(this.Name + " name Attempts " + attempts + " name " + name);
if (attempts < 50)
Form1.CurrentSelections.SelectedPreset.AddKey(Form1.CurrentSelections.SelectedPresetName, name, newKey);
}
Итак, что я на самом деле ожидаю, это после нажатия кнопки управления.Он создает новый пользовательский элемент управления в макете потока, а затем останавливает приложение, когда выполняет функцию InterceptOnce (), потому что там он будет ждать, пока я нажму вход, чтобы связать этот вход.Наконец, сохраните новую привязку ключей и сохраните словарь в файле.
Но он выдает исключение «ключ уже добавлен» в строке while (Form1.CurrentSelections ...) {} и доЯ добавил, что в то время как цикл и попытка try {} была сгенерирована для Form1.Context = InterceptionDriver.CreateContext ();что странно, потому что при использовании try {} catch (Exception excp) {} исключение не выдается.Я думаю, что исключение связано с новым CustomInputKey ();и понятия не имею, почему ...
Ошибка: снимок экрана