In C#
WinForm
Инициализация настольного приложения У меня есть пользовательский обработчик событий каретки:
public Form1()
{
InitializeComponent();
textBox1.GotFocus += new EventHandler(textBox1_GotFocus);
}
затем textBox1_KeyDown
показывает каретку:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
ShowCaret(textBox1.Handle);
}
И от textBox1_TextChanged
:
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
int x = 0;
DrawCaret(textBox1, x);
}
else if (textBox1.Text.Length < 1)
{
int x = 1;
DrawCaret(textBox1, x);
}
}
И:
[DllImport("user32.dll")]
static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight);
[DllImport("user32.dll")]
static extern bool ShowCaret(IntPtr hWnd);
void textBox1_GotFocus(object sender, EventArgs e)
{
int x = 1;
DrawCaret(textBox1, x);
}
int size;
public void DrawCaret(Control ctrl, int x)
{
if (x == 0) { size = 2; }
else { size = 15; }
var nHeight = textBox1.Height;
var nWidth = size;
nHeight = Font.Height;
CreateCaret(ctrl.Handle, IntPtr.Zero, nWidth, nHeight);
}
Я получаю:
System.ObjectDisposedException 'произошло в ShowCaret (ctrl.Handle);
Который показывает исключение в строке кода:
CreateCaret(ctrl.Handle, IntPtr.Zero, nWidth, nHeight);
Но привязан к static extern bool ShowCaret(IntPtr hWnd);
выше.
Не могу понять, что вызывает это исключение
Любое руководство, совет или пример будут полезны