0

ASP.Net ページに一連のチェックボックスがあります。すべてのチェックボックスは、チェックボックス ID をパラメーターとして受け入れる単一の関数を呼び出します。

問題は、コードが冗長になっていることです。コードを一般化する方法はありますか。以下にサンプルコードを添付します。

        protected void chkAddlDetails_CheckedChanged(object sender, EventArgs e)
        {
            if (chkAddlDetails.Checked == true)
            {
                blnShouldLock("chkAddlDetails");
                Panel9.Visible = true;
            }
            else
            {
                Panel9.Visible = false;
            }
        }
        protected void chkDeValidate_CheckedChanged(object sender,EventArgs e)
        {
            if (chkDeValidate.Checked == true)
            {
                blnShouldLock("chkDeValidate");
                Panel10.Visible = true;
            }
            else
            {
                Panel10.Visible = false;
            }
        }
        ............
        ............ and similar code repeats for other check boxes

チェックボックスの数が増えると、コードが拡張され、冗長性が増します。

冗長性を避けるために、一般化されたコードを作成するのを手伝ってくれる人はいますか? 疑似コードを提供できる場合は感謝します。

ありがとうございました。

4

2 に答える 2

0

すべてのチェックボックスに同じイベントを使用します。その後、イベントを発生さsenderせたにキャストできます。CheckBox

各パネルが 1 つのチェックボックスに対応する場合は、パネルにチェックボックスの名前を付けて「Panel」というサフィックスを付けることができます。たとえば、呼び出されたチェックボックスには呼び出されchkDevalidateたパネルがchkDevalidatePanelあり、以下のメソッドはすべてのチェックボックスで機能するはずです。Dictionary同じパネルが複数のチェックボックスで表示または非表示になっている場合は、または同様のものを使用してそれらを相互にマップする必要があります。

protected void GenericCheckedChanged(object sender, EventArgs e)
{
    CheckBox checkbox = (CheckBox)sender;
    Panel panel = (Panel)Page.FindControl(checkbox.ID + "Panel");

    if (checkbox.Checked)
    {
        blnShouldLock(checkbox.ID);
        panel.Visible = true;
    }
    else
    {
        panel.Visible = false;
    }
}
于 2013-10-24T18:04:27.380 に答える