Как отладить «Инициализатор типа для« WindowsFormsAutoClick.Form1 »выдал исключение.»? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь добавить новое значение словаря и добавить новый пользовательский элемент управления в макет потока.Но нажатие кнопки «Добавить элемент управления» вызывает исключение инициализатора с внутренним исключением, таким как «Ключ уже добавлен».Я не знаю полного исключения, потому что у меня возникают трудности с поиском, как открыть всплывающую ошибку, которая обычно появляется в 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 ();и понятия не имею, почему ...

Ошибка: снимок экрана

1 Ответ

0 голосов
/ 14 апреля 2019

Информация об ошибке инициализатора также отображается в классе [Design]. Переменная нестатическая будет перемещаться при возникновении исключения, что помогло мне найти причину исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...