我已被分配使用Windows窗体在C#中进行自定义网格控件.我不确定的一件事是如何处理显示闪烁的光标(插入符号)以指示正在进行单元格编辑的位置以及将显示下一个字符.
有谁知道如何使用标准文本框完成此操作?是否有一个标准的框架结构可以为我做这个?
显然我可以设置一个计时器并自己绘制光标,但我想知道是否有更好的选择.请注意,这是一个完全由用户绘制的控件,而不是UserControl派生,并且由于各种原因,子类化现有类不是一个选项.
Han*_*ant 10
干得好:
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();
}
Run Code Online (Sandbox Code Playgroud)
我很乐意在确定把它放在哪里时推卸责任.