private void tb_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
TextBox tb = sender as TextBox; // label textblock에서 응용가능
Regex regex = new Regex("[0-9]"); // defalt정규식
if (tb.SelectionStart ==0 && !tb.Text.Contains("-"))
{
regex = new Regex(@"[1-9]|-");
e.Handled = !regex.IsMatch(e.Text);
}
else if (tb.SelectionStart == 0 && tb.SelectedText.Length >0)
{
regex = new Regex(@"[1-9]|-");
e.Handled = !regex.IsMatch(e.Text);
}
else if(tb.SelectionStart == 0 && tb.Text.Contains("-"))
{
e.Handled = true;
}
else
{
e.Handled = !regex.IsMatch(e.Text);
}
}
경우의 수를 따지다가 훨씬 쉽고 간단한 방법이 떠 올랐다
private void tb_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
TextBox tb = sender as TextBox;
string text = "";
if (tb.SelectedText == "")
text = tb.Text.Insert(tb.SelectionStart, e.Text);
else
{
text = tb.Text.Replace(tb.SelectedText, e.Text);
}
Regex regex = new Regex(@"^[1-9]\d*$");
e.Handled = !regex.IsMatch(text);
}