You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#的DataGridView中实现类DOS样式自定义插入符的方案咨询

实现方案:C# DataGridView替换为DOS样式插入符
  • 核心原理

DataGridView进入单元格编辑模式时会调用系统原生插入符,要实现DOS样式的实心方块插入符,只需要屏蔽原生插入符,自行绘制自定义样式的闪烁插入符并同步位置即可。

  • 具体实现步骤
  1. 自定义继承自DataGridView的控件,开启双缓冲减少重绘闪烁
public class CustomDataGridView : DataGridView
{
    public CustomDataGridView()
    {
        DoubleBuffered = true;
    }
}
  1. 导入需要用到的Win32 API
[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
[DllImport("user32.dll")]
static extern bool GetCaretPos(out Point lpPoint);
  1. 重写OnCellBeginEdit方法,进入编辑状态时隐藏原生插入符,初始化自定义插入符的计时器和绘制逻辑:
    拿到当前编辑的TextBox控件句柄,调用HideCaret(textBox.Handle)隐藏系统插入符,启动500ms间隔的计时器控制插入符闪烁,闪烁频率可按需调整匹配DOS系统的插入符节奏。
  2. 插入符同步与绘制:
    每次计时器触发时,调用GetCaretPos获取原生插入符的当前坐标,转换为控件内的相对坐标,在对应位置绘制实心方块样式的DOS插入符,方块尺寸可设置为与当前字体的半角字符宽高一致,和原生插入符的位置完全对齐。
  3. 重写OnCellEndEdit方法,结束编辑时停止计时器,清除自定义插入符的绘制内容。
  • 注意事项
    • 处理控件失去焦点、窗体最小化等场景时,要同步暂停插入符闪烁,回到前台后再恢复,避免出现绘制残留
    • 不同DPI缩放场景下,要对插入符的尺寸做适配,避免出现缩放后插入符比例失调的问题

内容的提问来源于stack exchange,提问作者Shaifali Goel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:39:01