我已经创建了Windows窗体,我正在使用文本框控件进行输入,但我喜欢使用它而没有边框和其他文本框等布局。我只想使用下划线和闪烁光标。
我玩borderStyle(Fixed3D,无),backcolor = InactiveBorder等。但我仍然做网获取下划线...喜欢这个 - >的 _ __ _ __ _ __ _ __ _ 结果如下:这是下划线_ _ __ _ __ _ __ _ __ _
我认为Backcolor = InactiveBorder和BorderStyle = None可以使用,但如何获得下划线并闪烁光标?
要求:
答案 0 :(得分:1)
要伪造此内容,您可以在文本框下方添加标签,内容为_____________________
。我首选的解决方案是创建一个简单的自定义控件,只需绘制一条线。
默认情况下系统上的插入符号是否闪烁?如果焦点在文本框上,它会在我的系统上完成。
如果插入符号默认不闪烁,请转到Windows控制面板并检查键盘设置 - 这是您可以调整插入符号闪烁速率的位置。
答案 1 :(得分:1)
为underline
创建textbox
,您可以这样做,
panel
,其高度为文本框的高度+下划线的高度。textbox
添加到panel
内,并将其dock
设置为TOP
。border
设置为none
。backcolor
的{{1}}。[概念:您只需将所有文本框的边框设置为无。然后在表单中,绘制事件跟踪这些文本框并在其下绘制一条线。 ]
panel
答案 2 :(得分:0)
使用Masked TextBox并设置Focus,例如maskedtextbox1.Focus();
< ==这是用于闪烁光标,屏蔽文本框用于下划线!
尝试:
将逻辑焦点设置为输入控件
FocusManager.SetFocusedElement(this, textboxJack);
将键盘焦点设置为输入控件
Keyboard.Focus(textboxJill);
并且对于蒙版文本框,您可以设置一个在从中删除文本时不会更改的蒙版,而不是简单的文本框:) 祝你好运
答案 3 :(得分:0)
为此,我建议创建一个自定义控件(通过继承其中一个提供的控件类在WinForms世界中完成)。那个自定义控件将会:
提供自己的绘图逻辑(通过覆盖OnPaint
)以绘制下划线并跳过绘制您不想看到的任何其他内容(例如,控件的边框)。
在收到焦点时创建自己的插入符号,并在丢失焦点时销毁该插入符号。您可以找到有关如何执行此操作的所有详细信息in my answer here。
您还可以通过调用SetCaretBlinkTime
功能配置插入符的闪烁率。但请注意,这是不推荐,因为它会更改全局系统设置,因此会影响其他应用程序。如果您希望看到不同的内容,最好以Thorsten suggests为单位并修改设备上的设置。您应该始终尊重用户的设置。他们(或其他人)设置他们的系统是为了不让插入符号闪烁。
当然,您需要使用P / Invoke从C#应用程序调用与插入符号管理相关的这些Win32 API函数。如果你知道自己在做什么,那应该不会太难。如果您需要完整的解决方案,请在此问题上考虑setting a bounty,以说服我为您写一个。
答案 4 :(得分:0)
我遇到了同样的问题并构建了一些可行的方法:
public class TextBox : System.Windows.Forms.TextBox
{
public TextBox()
{
BorderStyle = BorderStyle.None;
Text = "__________"; //Sometime this doesn't work while creating the control in design mode ; don't know why
}
//protected override void OnFontChanged(EventArgs e)
//{
// base.OnFontChanged(e);
// RefreshHeight();
//}
bool loaded = false;
protected override void OnCreateControl()
{
if(!loaded)
RefreshHeight();
base.OnCreateControl();
}
private void RefreshHeight()
{
loaded = true;
Multiline = true;
Size s = TextRenderer.MeasureText(Text, Font, Size.Empty, TextFormatFlags.TextBoxControl);
MinimumSize = new Size(0, s.Height + 1);
Multiline = false;
}
}
由于bool loaded = false
,我使用OnCreateControl
来避免应用在循环中崩溃。 TextBox 控件没有OnLoad
事件(我接受其他方法)。
OnFontChanged
MinimumSize = new Size(0, s.Height + 1);
我添加了1 以避免MeasureText