【发布时间】:2018-04-13 23:37:21
【问题描述】:
我的问题是,当我比较两个完全相同的标签时,结果却是不同的。
代码描述:我创建了 3 个控件(按钮、标签和一个文本框)并为它们分配了相同的标签(比如 0)。当我按下这个新创建的按钮时,我想删除所有具有相同标签的 3 个控件。
添加按钮的代码(简化):
int Count = 0; // This var changes, but for the example it is 0
Button newButton = new Button();
newButton.Tag = Count;
newButton.Click += new EventHandler(DeleteName);
Controls.Add(newButton);
Label newLabel = new Label();
newLabel.Tag = Count;
Controls.Add(newLabel);
对于文本框也是如此。
删除背后的编码:
private void DeleteName(object sender, EventArgs e)
{
List<Control> toDelete = new List<Control>();
Button btn = sender as Button;
foreach (Control c in Controls)
{
if (c.Tag == btn.Tag)
toDelete.Add(c);
}
int tmp = toDelete.Count;
for (int i = 0; i < tmp; i++)
{
Controls.Remove(toDelete[i]);
}
}
当我之前执行相同的逻辑时,它曾经完美地工作,但现在它只是删除了按钮而没有其他控件(文本框和标签保持不变)。当我用例如“if (c is TextBox)”替换“if (c.Tag == btn.Tag)”时,它会将所有 TextBoxes 添加到列表中并删除它们,所以我相信问题出在这个标签的比较。
【问题讨论】:
-
从“它曾经完美运行”到“现在”之间发生了什么变化?您是否将一堆控件放在另一个容器控件中?如果是这样,您需要单独查询。您是否确认您希望删除的其他控件与您按下以触发此事件的按钮具有相同的标签?
-
在我不小心删除了整个方法并不得不完全重写之前,它曾经完美地工作过。我没有将控件添加到任何容器中。是的,我用一个消息框检查了所有这些控件都有一个标签“0”,完全一样。
-
您说“代码的描述:我创建 3 个控件...”但您没有创建任何控件。您是先手动添加它们吗?
-
我没有包含将控件添加到主题的代码。我使用以下逻辑:Count = 0;按钮 newButton = new Button(); newButton.Tag = 计数; Controls.Add(newButton);标签新标签 = 新标签(); newLabel.Tag = 计数;控件。添加(新标签);文本框也是如此
-
我建议您单步调试代码,看看为
btn.Tag和c.Tag设置了哪些值。