Winforms 如何在System.Windows.Forms.TextBox中隐藏输入插入符号?
我需要显示一个可变长度的消息,并允许文本是可选的。我已将文本框设置为只读,不允许编辑文本,但仍会显示输入插入符号Winforms 如何在System.Windows.Forms.TextBox中隐藏输入插入符号?,winforms,textbox,Winforms,Textbox,我需要显示一个可变长度的消息,并允许文本是可选的。我已将文本框设置为只读,不允许编辑文本,但仍会显示输入插入符号 闪烁的输入插入符号令人困惑。如何隐藏它?如果禁用文本框(设置Enable=false),其中的文本仍然可以滚动和选择。如果您不喜欢禁用文本框(通常为灰色背景)的视觉显示,可以手动覆盖颜色 请注意,在不使用默认颜色/主题设置的系统上,手动覆盖颜色会使窗体/控件看起来很奇怪。不要因为你的控件是白色的,就认为每个人的控件都是白色的。这就是为什么您应该尽可能始终使用系统颜色(在system.
闪烁的输入插入符号令人困惑。如何隐藏它?如果禁用文本框(设置
Enable=false
),其中的文本仍然可以滚动和选择。如果您不喜欢禁用文本框(通常为灰色背景)的视觉显示,可以手动覆盖颜色
请注意,在不使用默认颜色/主题设置的系统上,手动覆盖颜色会使窗体/控件看起来很奇怪。不要因为你的控件是白色的,就认为每个人的控件都是白色的。这就是为什么您应该尽可能始终使用系统颜色(在
system.Drawing.SystemColors
枚举中定义),例如SystemColors.ControlLight
好的,这无法完成。TextBox控件是一个有趣的控件,因为它实际上有很多无法修改的行为,因为它访问操作系统的方式。这就是为什么许多很酷的自定义文本框都是从头开始编写的
我担心您可能无法执行您希望执行的操作:(您可以通过win32调用执行此操作
[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
HideCaret(someTextBox.Handle);
}
在使用win32调用时,不要忘记将光标隐藏在文本框的GotFocus事件中。为了完整起见,我需要这样一个功能来使用 它们已经提供了一个
ShowCaret
和一个HideCaret
方法,不幸的是它们受到了保护。因此,我创建了一个派生类来提供该功能。下面是完整的代码:
public class MyTextEdit : TextEdit
{
private bool _wantHideCaret;
public void DoHideCaret()
{
HideCaret();
_wantHideCaret = true;
}
public void DoShowCaret()
{
ShowCaret();
_wantHideCaret = false;
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
if (_wantHideCaret)
{
HideCaret();
}
}
}
要使用代码,只需在代码中使用派生类而不是原始的TextEdit
类,并在任何地方调用DoHideCaret()
,例如在包含文本编辑控件的窗体的构造函数中
也许这对将来的某个人有帮助。我知道这是一条老线索,但它是一个有用的参考 我用一个简单得多但非常笨拙的解决方案解决了这个问题,这可能取决于你对用户访问表单的控制程度我给了prime tabIndex值,然后将其放置在窗体之外,使其不可见。这在对话框中效果很好,因为用户无法调整大小。如果窗体可调整大小,则可能不起作用
正如我所说,这是一个难题,但设置起来容易多了。(顺便说一句,我发现隐藏的方法不起作用,但我没有努力追求。)不要忘记使用System.Runtime.InteropServices;和
ShowCaret(IntPtr hWnd);
不,它不可选择(或可滚动)如果文本框被禁用。您可能正在考虑将其设为只读。对于输入字段需要可见的情况,这听起来并不有用,我认为这几乎适用于任何情况。如果字段本身不可见,则不需要单独隐藏插入符号。这是否回答了您的问题在…上