带有持久文本的C#TextBox

时间:2016-03-29 16:48:17

标签: c# textbox userform

对于游戏,我正在尝试制作一个文本框,其文本类似于" 0/100"。我希望该文字:

  1. 始终保持,即单击文本框不使文本消失。我知道我可以为OnFocus / LoseFocus创建事件处理程序,但这仍然会使文本消失。

  2. 用户只能在文本的左侧部分输入值。即我希望用户只修改" XXX"此示例中的部分:" XXX / 100"。

  3. 我发现了this问题,但它适用于CSS。

    另外,我知道我可以按照我的意愿制作看起来的东西,但我更愿意只在我想要的东西不能做到这一点仅使用文本框即可实现。

1 个答案:

答案 0 :(得分:0)

您可以使用RichTextBox控件来实现:

var rtb = new RichTextBox();
rtb.ShortcutsEnabled = false;
rtb.Location = new Point(16, 16);
rtb.Size = new Size(96, 23);
rtb.Multiline = false;
rtb.Text = " / 100";
rtb.SelectAll();
rtb.SelectionProtected = true;
rtb.Select(0, 0);      
rtb.KeyPress += rtb_KeyPress;
this.Controls.Add(rtb);

void rtb_KeyPress(object sender, KeyPressEventArgs e) {
  RichTextBox rtb = sender as RichTextBox;
  if (rtb.SelectionStart == rtb.TextLength) {
    e.Handled = true;
  } else if (!Char.IsDigit(e.KeyChar)) {
    e.Handled = true;
  } else if (rtb.TextLength == 9) {
    if (rtb.SelectionLength > 0) {
      if (rtb.SelectionStart > 3) {
        e.Handled = true;
      }
    } else {
      e.Handled = true;
    }
  } else if (rtb.SelectionStart == 0 && rtb.SelectionLength == 0) {
    rtb.SelectionProtected = false;
  }
}