0

それぞれがいくつかのラベルとコンボボックスを含む複数のパネルを生成するコードがあります。各パネルに含まれるコントロールの 1 つはチェックボックスです。ユーザーがチェックボックスをオンにすると、チェックボックスがあったパネル全体が削除される必要があります。パネルを生成する foreach ループ内では、パネル自体に「Strip」という名前でアクセスできます。このループの外側で、必要なすべてのパラメーター (または引数、ここでの用語については不明) を転送すると、ラベル「コールサイン」の 1 つの後に呼び出されるため、その名前をメソッドに取得する必要がある場合は、パラメータ「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)
{
}

... まず、 「引数を 1 つ取るcheck.CheckedChanged += new System.EventHandler(CheckCheckedChanged(callsign.Text)); メソッドのオーバーロードはありません」という行でエラーが発生します。CheckCheckedChanged何が悪いのかわからないので、それが私の最初の質問です。2 つ目は、callsign.Text にちなんで名付けられた 1 つの特定のパネルを削除するメソッドの書き方がわかりません。単に「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 に答える