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

将插入符号放在MaskedTextbox中

如何解决《将插入符号放在MaskedTextbox中》经验,为你挑选了3个好方法。

我希望能够覆盖在插入的文本框中定位插入符的默认行为.

默认情况下将插入符号放在单击鼠标的位置,屏蔽文本框已包含由于掩码而导致的字符.

我知道你可以隐藏这篇文章中提到的插入符号,当控件获得焦点时,是否有类似于在文本框开头放置插入符号的东西.



1> Abbas..:

这应该做的伎俩:

    private void maskedTextBox1_Enter(object sender, EventArgs e)
    {
        this.BeginInvoke((MethodInvoker)delegate()
        {
            maskedTextBox1.Select(0, 0);
        });         
    }


啊,所以你需要使用BeginInvoke!我没有这样做就尝试了这个,结果没有看到任何变化.+1

2> Ishmaeel..:

要改进Abbas的工作解决方案,请尝试以下方法:

private void ueTxtAny_Enter(object sender, EventArgs e)
{
    //This method will prevent the cursor from being positioned in the middle 
    //of a textbox when the user clicks in it.
    MaskedTextBox textBox = sender as MaskedTextBox;

    if (textBox != null)
    {
        this.BeginInvoke((MethodInvoker)delegate()
        {
            int pos = textBox.SelectionStart;

            if (pos > textBox.Text.Length)
                pos = textBox.Text.Length;

            textBox.Select(pos, 0);
        });
    }
}

此事件处理程序可以与多个框重复使用,并且不会消除用户将光标定位在输入数据中间的能力(即,当框不为空时,不会将光标强制置于零位置).

我发现这更接近于模仿标准文本框.只剩下毛刺(我可以看到)是在'Enter'事件之后,如果xe按住鼠标并拖动到最后,用户仍然可以选择其余的(空)掩码提示.



3> 小智..:

这是对MaskedTextBoxes默认行为的重大改进.谢谢!

我对Ishmaeel的出色解决方案做了一些改动.我更喜欢只在需要移动光标时才调用BeginInvoke.我还从各种事件处理程序调用该方法,因此输入参数是活动的MaskedTextBox.

private void    maskedTextBoxGPS_Click( object sender, EventArgs e )
{
    PositionCursorInMaskedTextBox( maskedTextBoxGPS );
}


private void    PositionCursorInMaskedTextBox( MaskedTextBox mtb )
{
  if (mtb == null)    return;

  int pos = mtb.SelectionStart;

  if (pos > mtb.Text.Length)
    this.BeginInvoke( (MethodInvoker)delegate()  { mtb.Select( mtb.Text.Length, 0 ); });
}

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