System.ObjectDisposedException 'с указанием стоимости в приложении WinForm C # - PullRequest
0 голосов
/ 03 октября 2018

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); выше.

Не могу понять, что вызывает это исключение

Любое руководство, совет или пример будут полезны

...