0

我有一个生成多个面板的代码,每个面板都包含一些标签和组合框。每个面板中包含的控件之一是一个复选框,我需要做的是,当用户选中该复选框时,该复选框所在的整个面板将被删除。在生成面板的 foreach 循环中,可以使用名称“Strip”访问面板本身。在这个循环之外,如果我要传输所有必要的参数(或参数,不确定这里的术语),它会在它的标签之一“呼号”之后被调用,所以当我需要将它的名字放到一个方法中时,我设置为参数“callsign.Text”。现在,这是我的 Checkbox 生成代码:

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”,那么我想它不会起作用。提前致谢

4

1 回答 1

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
    }
}
于 2012-12-11T22:46:14.430 回答