我已被分配使用Windows窗体在C#中进行自定义网格控件.我不确定的一件事是如何处理显示闪烁的光标(插入符号)以指示正在进行单元格编辑的位置以及将显示下一个字符.
有谁知道如何使用标准文本框完成此操作?是否有一个标准的框架结构可以为我做这个?
显然我可以设置一个计时器并自己绘制光标,但我想知道是否有更好的选择.请注意,这是一个完全由用户绘制的控件,而不是UserControl派生,并且由于各种原因,子类化现有类不是一个选项.
干得好:
using System; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; public class MyWidget : Control { public MyWidget() { this.BackColor = Color.Yellow; } protected override void OnGotFocus(EventArgs e) { CreateCaret(this.Handle, IntPtr.Zero, 2, this.Height - 2); SetCaretPos(2, 1); ShowCaret(this.Handle); base.OnGotFocus(e); } protected override void OnLostFocus(EventArgs e) { DestroyCaret(); base.OnLostFocus(e); } [DllImport("user32.dll", SetLastError = true)] private static extern bool CreateCaret(IntPtr hWnd, IntPtr hBmp, int w, int h); [DllImport("user32.dll", SetLastError = true)] private static extern bool SetCaretPos(int x, int y); [DllImport("user32.dll", SetLastError = true)] private static extern bool ShowCaret(IntPtr hWnd); [DllImport("user32.dll", SetLastError = true)] private static extern bool DestroyCaret(); }
我很乐意在确定把它放在哪里时推卸责任.