2015-02-09 19 views
0

我有一個小問題,我使用的WinForms,我有一個想法,我想改變光標顏色到文本框當用戶正在編輯它呢。這個想法是當用戶正在寫入時顯示一個顏色,顯示一個顏色不顯示一個cursor.cur,我可以如何將顏色光標更改爲texBox? 感謝您的回答。我該如何做到這一點,以便當用戶進入文本框,光標顏色變化C#

+0

如果您確實想要更改'caret'(垂直線顯示文本光標所在的位置),請查看http://stackoverflow.com/questions/609927/custom-caret-for-winforms-textbox – 2015-02-09 17:55:11

+0

我解決了這個問題。 https://docs.google.com/document/d/1z1oZJjNPKFX_EyTCTxtKXkpSUctsGdhtrpUTJ8IrLM8/edit?usp=sharing – 2015-02-09 22:04:17

+0

隨時回答你自己的問題。用自己的語言和代碼提供解決方案的大綱。 – 2015-02-09 22:48:46

回答

1

改變光標從一個文本框,在的WinForms

  1. 添加類NativeMethod

    public class NativeMethod { 
    
    [DllImport("user32.dll")] 
    public extern static int GetCaretBlinkTime(); 
    [DllImport("user32.dll")] 
    public extern static int SetCaretBlinkTime(int wMSeconds); 
    [DllImport("user32.Dll")] 
    public extern static int GetCaretPos(ref POINT pt); 
    [DllImport("user32.dll")] 
    public extern static int SetCaretPos(int x, int y); 
    [DllImport("user32.Dll")] 
    public extern static int DestroyCaret(); 
    [DllImport("user32.dll")] 
    public extern static int CreateCaret(IntPtr hwnd, IntPtr hBitmap, int nWidth, int nHeight); 
    [DllImport("user32.dll")] 
    public extern static int ShowCaret(IntPtr hwnd); 
    [DllImport("user32.dll")] 
    public extern static int HideCaret(IntPtr hwnd); 
    
    [StructLayout(LayoutKind.Sequential)] 
    public struct POINT 
    { 
        public int x; 
        public int y; 
    } 
    

    }

  2. 創建變量:

    private System.Drawing.Bitmap bm; private IntPtr hBitmap; 
    
  3. 添加點擊並從文本框的框TextChanged方法,其中定義光標將顯示,在這些方法必須添加下列行:

    NativeMethod.CreateCaret(this.textBox1.Handle, hBitmap, 0, 0); 
    
    NativeMethod.ShowCaret(this.textBox1.Handle); 
    
  4. 各方法將是如下:

    private void textBox1_Click(object sender, EventArgs e) 
    { 
        NativeMethod.CreateCaret(this.textBox1.Handle, hBitmap, 0, 0); 
        NativeMethod.ShowCaret(this.textBox1.Handle); 
    } 
    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
        NativeMethod.CreateCaret(this.textBox1.Handle, hBitmap, 0, 0); 
        NativeMethod.ShowCaret(this.textBox1.Handle); 
    } 
    
  5. 在Form_Load事件中添加下一行。

    bm = new Bitmap("puntero.png"); 
    hBitmap = bm.GetHbitmap(); 
    

其中「puntero.png」是先前創建的圖像,其尺寸可以變化,但在本例中,我們使用尺寸PX圖像5×25紅色,這圖像是負的顏色。

相關問題