WPF文本框-仅追加
本文关键字:追加 文本 WPF | 更新日期: 2023-09-27 18:02:42
我需要一个文本框,可以包含最多8个字符,可以通过设置
来实现this.textBox1.MaxLength = 8;
然而,有时我的程序会预先输入几个字符(即6)。当呈现给用户时,我希望他能够添加缺失的2,但不能删除预先输入的6个字符。
我不想有像
这样的东西if(!textBox1.Text.Equals(strPreEntered)) throw new Exception(); // Or show a messagebox, or ..
理想情况下,我希望文本框在textBox1.Length == strPreEntered.Length
你真正想要的是一个标志,指示TextBox是否有预先输入的字符发送给它。当您将预先输入的字符发送到文本框时,将其设置为true。
然后在TextBox的OnKeyPress事件中,如果KeyCode是退格,如果设置了标志,则忽略按键。
public class FormTest : Form
{
public FormTest() : base()
{
LimitedTextBox tb = new LimitedTextBox();
this.Controls.Add(tb);
tb.Text = "123456";
tb.MaxLength = 8;
tb.HasPreenteredText = true;
}
}
public class LimitedTextBox : TextBox
{
private int preenteredTextLength = -1;
private bool hasPreenteredText = false;
public bool HasPreenteredText
{
get { return hasPreenteredText; }
set
{
if (value == true)
{ preenteredTextLength = this.TextLength; }
else
{ preenteredTextLength = -1; }
hasPreenteredText = value;
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (this.TextLength <= preenteredTextLength && e.KeyChar == ''b')
{ e.Handled = true; } // Causes the KeyPress to be skipped as it was already 'handled'
if (this.SelectionStart < preenteredTextLength) // Prevent user from overwriting/deleting selected text beyond the minimum text length
{ e.Handled = true; }
base.OnKeyPress(e);
}
}
上面的代码有点潦草,但你当然想把它清理干净。也许有一个SetPreenteredText()方法处理在LimitedTextBox控件中设置布尔值并使布尔值私有,你不想用那种事情麻烦调用者。代码按照预期工作,并完成了您似乎想要的功能。