Ошибка 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
}