我有几个文本框应该允许某种格式,但是当用户在文本框中以错误的格式输入它时,我想捕获控件名称并清除文本框的文本。
答案 0 :(得分:1)
清除用户输入,因为它不是给定格式,对用户不友好。如果十个字符中只有一个错了怎么办?他们必须再次打字。只需使用MaskedTextBox Mask
作为您期望的模式。
使用MaskedTextBox
时,您可以按照here所述订阅MaskInputRejected
事件:
public void Form1_Load(Object sender, EventArgs e)
{
... // Other initialization code
maskedTextBox1.Mask = "00/00/0000";
maskedTextBox1.MaskInputRejected += new MaskInputRejectedEventHandler(maskedTextBox1_MaskInputRejected)
}
void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
toolTip1.ToolTipTitle = "Invalid Input";
toolTip1.Show("We're sorry, but only digits (0-9) are allowed in dates.", maskedTextBox1, maskedTextBox1.Location, 5000);
}
答案 1 :(得分:0)
抛出预期行为的例外是永远不对的,因为它们非常昂贵。如果您需要查看异常发生的位置,请检查堆栈跟踪的顶行。
答案 2 :(得分:0)
仅调试
您可以从yourForm.cs获取调试模式下的控件名称。我不认为这个代码将运行在relez cuz上。源文件不能正确发布吗?
using System.Diagnostics;
public void ParseControlText()
{
try
{
var doubleval = Double.Parse(tb_double.Text);
var intval = Int32.Parse(tb_int.Text);
//... bunch of controls need to be parssed to calculate something
}
catch (FormatException ex)
{
var stlast = new StackTrace(ex,true).GetFrames().Last();
//this requires form.cs to exist . how am i gonna do this in release? idk
var stLine = File.ReadLines(stlast.GetFileName())
.ToList()[stlast.GetFileLineNumber()-1];
var m = Regex.Match(stLine ,@"\((.*?)\..*?\)");
var ctrlname = m.Groups[1].Value;
MessageBox.Show( ctrlname + " control's text coundnt be Parsed! " );
}
}