如果我无法正确表达我的问题,我深表歉意,我不确定是否有我正在寻找的名称。
我有以下字典:
Dictionary<int, string> captions = new Dictionary<int, string>();
还有一些像这样的方法:
public string disallowChar(string input)
{
if (input.Contains(@"|") || input.Contains(@"\"))
{
MessageBox.Show("You may not enter the characters | or \\.");
input = "";
}
return input;
}
最后,我为 10 个不同的文本框提供了这个“验证”代码,它们都命名为“caption1”、“caption2”……“caption10”(使用 winforms 设计器脚本中的 EventHandlers):
private void caption1_Validated(object sender, EventArgs e)
{
captions[1] = disallowChar(caption1.Text);
caption1.Text = captions[1];
}
private void caption2_Validated(object sender, EventArgs e)
{
captions[2] = disallowChar(caption2.Text);
caption2.Text = captions[2];
}
//.
//.
//Skip unnecessarily pasted methods 3-9 (Point made)
//.
//.
private void caption10_Validated(object sender, EventArgs e)
{
captions[10] = disallowChar(caption10.Text);
caption10.Text = captions[10];
}
这段代码工作正常。而且由于我的小程序有很多输入,所以我对按钮、numeraUpDowns 等其他所有内容都有类似的“执行方式”。但是,即使作为初学者,我也知道这不是正确的执行方式。通过这样做,我有超过 1000 行,也许我应该有 100 行。我知道我可以转到“事件属性”并将“验证”属性设置为每个文本框的单个验证方法。我只是不知道什么方法可以涵盖所有内容。
不幸的是,我只是不知道我在寻找什么来做到这一点。我查找了“this”属性,但不明白它如何帮助处理一堆类。否则我的搜索就会枯竭。
假设我以某种方式为每个文本框设置了一个 1-10 整数(我们称之为keyValue
),我想象一个解决方案如下所示,当我放置this.Text
或this.keyValue
关键字this
“神奇地”引用所涉及的文本框时(但是当我在this.Text
任何地方尝试该方法时)在我的程序中,它返回我的程序的窗口名称):
private void caption_Validated(object sender, EventArgs e)
{
captions[this.keyValue] = disallowChar(this.Text);
this.Text = captions[this.keyValue];
}
有没有替代this
关键字的方法?还是我误解了如何使用它?
编辑答案:我是新手,但是当我经常搜索和使用这个网站时,我总是喜欢用户用他们的最终解决方案编辑他们的问题。感谢接受的答案,我使用了这个:
private void caption_Validated(object sender, EventArgs e)
{
TextBox textBox = sender as TextBox;
int keyValue = Convert.ToInt32(textBox.Tag);
captions[keyValue] = disallowChar(textBox.Text);
textBox.Text = captions[keyValue];
}
在 winforms Designer 中,我将每个标题文本框的“Tag”属性设置为其各自的编号。给出了(int)textBox.Tag
一个错误。谷歌搜索了一下后,我发现“Tag
是从类继承的Control
并且是System.Object
类型。” 以及使用该Convert
课程的建议,它奏效了。
使用字典以及我如何验证字符串可能效率低下,但这肯定更好,并且在object sender
和Tag
部分上启发了我很多。希望这有一天可以帮助别人。谢谢。