TextBox bileşeninde metin girişi yaparken yanıp sönen imlecin gözükmemesini isteyebiliriz. Bunun için aşağıdaki kod örneğini kullanabilirsiniz.

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool HideCaret(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool ShowCaret(IntPtr hWnd);


 

bool durum = false;

 

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (durum)
    {
        HideCaret(textBox1.Handle);
    }
}

 

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    ShowCaret(textBox1.Handle);
    if (e.KeyData == Keys.Space)
        durum= false;
    else
        durum= true;
}

Yukarıdaki kod örneğini açıklayalım. Burada kullandığım ShowCaret ve HideCaret diye iki fonksiyonumuz mevcut. Bu fonksiyonlarımızı user32.dll dosyamızdan import ediyoruz. Bu fonksiyonlara parametre olarak işlem yapmak istediğimiz TextBox ın IntPtr tipinde olan Handle ını göndermemiz gerekli. Bu fonksiyonlar adındanda anlaşılacağı gibi ShowCaret imleci göstermeye, HideCaret gizlemeye yarıyor. Ben sadece metin girişinde imlecin gizli kalmasını istiyorum. Bu yüzden HideCaret fonksiyonunu TextBox ımızın TextChanged olayına yazdım. Geri kalan girişlerde(örn: sol ok,space tuşu…) imlecin görünür olmasını istediğimden dolayı ShowCaret fonksiyonunu TextBox ımızın KeyDown olayına yazdım. KeyDown olayı TextChanged olayından önce çalışan bir olaydır. Sol ok tuşuna basıldığında sadece KeyDown olayı gerçekleşir. Fakat Space tuşuna basıldığında hem KeyDown olayı hem TextChanged olayı gerçekleşir. Space tuşuna basıldığında ilk önce KeyDown sonrasında TextChanged olayı çalışacağı için, Space tuşuna basıldığında bool tipindeki durum değişkenini false yaparak TextChanged olayında HideCaret fonksiyonunun çalışmamasını sağlamış oldum. Bu sayede imlecim Space tuşuna basıldığında görünür halde olacak.

Bu şekilde örneği kendinize göre uyarlayarak istediğiniz metin girişi bileşeninde imleci gizleyebilirsiniz.