gpt4 book ai didi

c# - 如何将10个类似的事件方法转换为一个方法来处理上述10个事件?

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:41 25 4
gpt4 key购买 nike

如果无法正确表达我的问题,我深表歉意。我不确定要寻找的名字是否有名字。

我有以下字典:

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];
}


此代码可以正常工作。而且由于我的小程序有很多输入,所以对于按钮,numericaUpDowns等其他所有内容,我都有类似的“执行方式”。
但是,即使是初学者,我也知道这不是正确的方法。通过这样做,我有1000条线,也许我应该有100条线。
我知道我可以转到“事件属性”并将“验证的”属性设置为每个文本框的单个Validation方法。我只是不知道哪种方法可以涵盖所有内容。

不幸的是,我只是不知道自己在寻找什么。我查了一下“ this”属性,但不明白它如何帮助一堆类。否则我的搜索就会枯竭。

假设我以某种方式为每个文本框设置了1-10的整数(我们称其为 keyValue),我想象一个解决方案,如下所示,当我放置 this.Textthis.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中,我将每个标题textBox的“ Tag”属性设置为其各自的编号。
(int)textBox.Tag给出了错误。稍作搜索后,我发现“ Tag是从 Control类继承的,并且是 System.Object类型。”和使用 Convert类的建议,它奏效了。

使用字典以及如何验证字符串可能效率不高,但这肯定更好,并且在 object senderTag部分上给了我很多启发。希望有一天能帮助别人。谢谢。

最佳答案

我能想到的最快解决方案:

使用sender参数,并将整数放入每个标题的Tag属性中:

//...
caption1.Tag = 0;
caption2.Tag = 1;
//...



您可以在创建TextBoxes时在设计器中执行此操作(控件属性中的 Tag属性)
或者如果字幕是在代码中以某种方式生成的,那么应该容易地自动为其分配标签


然后:

private void caption_Validated(object sender, EventArgs e)
{
TextBox textBox = sender as TextBox;
captions[(int)textBox.Tag] = disallowChar(textBox.Text);
textBox.Text = captions[(int)textBox.Tag];
}


但是无论如何,我不确定为什么您需要 captions词典-似乎多余,因为所有标题都存储在每个TextBox的 Text属性中。

关于c# - 如何将10个类似的事件方法转换为一个方法来处理上述10个事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18364064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com