当前位置:  开发笔记 > 编程语言 > 正文

WinForms TextBox的自定义插入

如何解决《WinFormsTextBox的自定义插入》经验,为你挑选了2个好方法。

我正在WinForms .Net 2.0应用程序中开发类似应用程序的自定义HyperTerminal.我在Panel中有一个多行TextBox,您可以在其中与硬件设备进行交互.

我的客户希望拥有一个自定义Caret,一个填充矩形,大小为一个字符空间,而不是默认的垂直线.

我知道.Net默认情况下不提供执行此操作的选项,但必须有一些Windows功能才能执行此操作.



1> NileshChauha..:

这些是Windows提供的Native Caret功能列表,您可以将它们用于您的应用程序.

    [DllImport("User32.dll")]
    static extern bool CreateCaret(IntPtr hWnd, int hBitmap, int nWidth, int nHeight);

    [DllImport("User32.dll")]
    static extern bool SetCaretPos(int x, int y);

    [DllImport("User32.dll")]
    static extern bool DestroyCaret();

    [DllImport("User32.dll")]
    static extern bool ShowCaret(IntPtr hWnd);

    [DllImport("User32.dll")]
    static extern bool HideCaret(IntPtr hWnd);

参考SharpDevelop,源代码@ src\Libraries\ICSharpCode.TextEditor\Project\Src\Gui\Caret.cs



2> Julian de Wi..:

假设一个带有文本框的表单:

public partial class Form1 : Form
{
    [DllImport("user32.dll")]
    static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight);
    [DllImport("user32.dll")]
    static extern bool ShowCaret(IntPtr hWnd);

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Shown(object sender, EventArgs e)
    {
        CreateCaret(textBox1.Handle, IntPtr.Zero, 10, textBox1.Height);
        ShowCaret(textBox1.Handle);
    }
}

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有