[英]How to catch the control name that caused exception in C#?
我有几个文本框应允许使用某种格式,但是当用户在文本框中以错误的格式输入它时,我想捕获控件名称并清除文本框的文本。
清除用户输入(因为它不是给定格式)非常不友好。 如果十个字符中只有一个是错误的怎么办? 他们必须重新输入一次。 只需将MaskedTextBox与Mask
配合使用即可。
当使用MaskedTextBox
,您可以订阅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);
}
仅调试
您可以从yourForm.cs以调试模式获取控件名称。 我不认为此代码将在relese 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! " );
}
}
抛出异常的预期行为永远是不正确的,因为它们非常昂贵。 如果您需要查看异常的起源,只需检查堆栈跟踪的第一行即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.