我有一个生成多个面板的代码,每个面板都包含一些标签和组合框。每个面板中包含的一个控件是一个复选框,我需要做的是,当用户选中复选框时,复选框所在的整个面板将被删除。 在生成面板的foreach循环内部,可以使用名称“Strip”访问面板本身。在这个循环之外,如果我要传输所有必要的参数(或参数,不确定这里的术语),它将在其标签之一“callign”之后被调用,所以当我需要将其名称输入方法时,我设置为参数“callsign.Text”。 现在,这是我的Checbox生成代码:
CheckBox check = new CheckBox();
check.Location = new Point(270, 10);
check.Name = "check:" + callsign.Text;
check.CheckedChanged += new System.EventHandler(CheckCheckedChanged(callsign.Text));
Strip.Controls.Add(check);
这里是CheckCheckedChanged方法的定义:
public void CheckCheckedChanged(string callsign, object sender, EventArgs e)
{
}
...首先,我在check.CheckedChanged += new System.EventHandler(CheckCheckedChanged(callsign.Text));
行遇到了错误
它说,“方法CheckCheckedChanged
没有重载需要1个参数”。我不知道什么是错的,这就是我的第一个问题。第二个是 - 我无法弄清楚如何编写方法来删除以callsign.Text命名的一个特定面板,如果我只写“callsign dispose”,那么我想它不会起作用。
提前致谢
答案 0 :(得分:0)
您需要做的第一件事是从事件处理程序中删除string callsign
参数。这就是导致编译器错误的原因。所以你的方法签名将如下所示:
public void CheckCheckedChanged(object sender, EventArgs e)
其次,您需要更改事件附加到事件处理程序的方式:
check.CheckedChanged += new System.EventHandler(CheckCheckedChanged(callsign.Text));
将成为:
check.CheckedChanged += new System.EventHandler(CheckCheckedChanged);
接下来,您希望将代码放入事件处理程序以获取复选框的状态并相应地设置面板的可见性。您将使用面板名称替换面板。
public void CheckCheckedChanged(object sender, EventArgs e)
{
CheckBox checkbox = sender as CheckBox;
if (checkbox != null)
{
((Panel)checkbox.Parent).Visible = !checkbox.Checked; // replace this with your panel
}
}