Ошибка System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта." System.ComponentModel.TypeConverter.ConvertFromString(...)

System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."

System.ComponentModel.TypeConverter.ConvertFromString(...) вернул null.

Что это значит и в чём ошибка ? Вот проблемный код

public void Form1_Load(object sender, EventArgs e)
    {
        KeysConverter kc = new KeysConverter();
        string keystring = textBox1.Text;
        Keys keyspecial = (Keys)kc.ConvertFromString(keystring);
        string _keyspecial = keyspecial.ToString();
        int __keyspecial = Int32.Parse(_keyspecial);

        keybd_event(0x90, 0x45, 0x1, (UIntPtr)0);
        _hook = new Hook(__keyspecial);
        _hook.KeyPressed += new KeyPressEventHandler(_hook_KeyPressedEscape);
        _hook.SetHook();
    }

Писал хук по данному вопросу

класс Hook:

public class Hook : IDisposable
{
    #region Declare WinAPI functions
    [DllImport("kernel32.dll")]
    private static extern IntPtr LoadLibrary(string lpFileName);

    [DllImport("user32.dll")]
    private static extern IntPtr SetWindowsHookEx(int idHook, KeyboardHookProc callback, IntPtr hInstance, uint threadId);
    [DllImport("user32.dll")]
    private static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam);
    [DllImport("user32.dll")]
    private static extern bool UnhookWindowsHookEx(IntPtr hInstance);
    #endregion
    #region Constants
    private const int WH_KEYBOARD_LL = 13;
    private const int WH_KEYDOWN = 0x0100;
    #endregion

    // код клавиши на которую ставим хук
    public int _key;
    public event KeyPressEventHandler KeyPressed;

    private delegate IntPtr KeyboardHookProc(int code, IntPtr wParam, IntPtr lParam);
    private KeyboardHookProc _proc;
    private IntPtr _hHook = IntPtr.Zero;

    public Hook(int keyCode)
    {
        _key = keyCode;
        _proc = HookProc;
    }

    public void SetHook()
    {
        var hInstance = LoadLibrary("User32");
        _hHook = SetWindowsHookEx(WH_KEYBOARD_LL, _proc, hInstance, 0);
    }

    public void Dispose()
    {
        UnHook();
    }

    public void UnHook()
    {
        UnhookWindowsHookEx(_hHook);
    }

    private IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam)
    {
        if ((code >= 0 && wParam == (IntPtr)WH_KEYDOWN) && Marshal.ReadInt32(lParam) == _key)
        {

            // бросаем событие
            if (KeyPressed != null)
            {
                KeyPressed(this, new KeyPressEventArgs(Convert.ToChar(code)));
            }
        }

        // пробрасываем хук дальше
        return CallNextHookEx(_hHook, code, (int)wParam, lParam);
    }
}

Код textBox1:

public void textBox1_KeyUp(object sender, KeyEventArgs e)
    {

        #region Привязка клавиш
        if (Keys.A <= e.KeyCode && e.KeyCode <= Keys.Z)
        {//Character keys
            textBox1.Text = e.KeyCode.ToString();
        }
        if (Keys.F1 <= e.KeyCode && e.KeyCode <= Keys.F9)
        { //func keys (F)
            textBox1.Text = e.KeyCode.ToString();
        }
        if (Keys.D0 <= e.KeyCode && e.KeyCode <= Keys.D9)
        { //number keys
            textBox1.Text = e.KeyCode.ToString().Replace("D", null);
        }
        if (textBox1.TextLength == 1)
        {
            button2.Enabled = true;
        }

        #endregion
    }

Ответы (0 шт):