0

ページの読み込み時にコードで生成されたボタンと、デザイン ビューで手動で追加されたボタンに関する大きな疑問。

手動で 140 個のボタンを追加することはできないため、コードを使用することをお勧めします。ボタンをクリックすると、すべてのボタンが同様に動作します(色が変わります)。明らかに 140 個のクリック イベント メソッドを作成することはできませ

私はこれを行うことを考えました:

protected void btn_Click(object sender, EventArgs e)
        {
            Button btn1 = Panel2.FindControl("btn") as Button;
            btn1.BackColor = Color.Red;
         }

すべてのボタンは btn と呼ばれているためです。

これは私がボタンを追加する方法です:

for (int a = 1; a <= 10; a++)
            {
                for (char b = 'A'; b <= 'N'; b++)
                {
                    btn = new Button();
                    btn.Text = "";
                    btn.Height = 20; btn.Width = 20;
                    btn.ToolTip = a + " " + b;
                    Panel2.Controls.Add(btn);
                }
                Panel2.Controls.Add(new LiteralControl("<br/>")); // this inserts a paragraph

            }

btn_Click(object sender, EventArgs e)ボタンをクリックするとすべて消えるため、機能するかどうかはわかりません。どうすれば修正できますか?

最後に、red のボタンの数を数えます。私の次のアイデアは実用的ですか?「btn」というボタン コントロールを見つける方法はわかっていますが、特定のプロパティを持つ「ボタン」を見つける方法はわかっています。 10N) 各ボタンをチェックし (それぞれに固有のツールチップがあることを考慮して)、毎回色をチェックします. 赤い色ごとに、ボタンを数えます.

それらがすべて「btn」と呼ばれているのは問題ですか?今のところ、私が言ったように、1A、1B、...10N というツールチップでそれらを区別することができます。どうもありがとう。

編集>>>>>>> ベンのアドバイスを試してみましたが、問題は、いずれかをクリックするとすべてのボタンが消えることです。お待ちいただきありがとうございます。

public partial class Seatalloc2 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                PopulateControls();
            }
        }

        protected void PopulateControls()
        {

            Panel1.Visible = true;
            Button btn;

            Panel2.Visible = true;
            DropDownList nrbileteddl = Panel1.FindControl("nrBileteddl") as DropDownList;
            nrbileteddl.Visible = true;

            for (int i = 1; i <= 5; i++)
            {
                nrbileteddl.Items.Add(i + "");
            }

            for (int a = 1; a <= 10; a++)
            {
                for (char b = 'A'; b <= 'N'; b++)
                {
                    btn = new Button();
                    btn.Text = "";
                    btn.Height = 20;
                    btn.Width = 20;
                    btn.ToolTip = a + " " + b;
                    btn.BackColor = Color.Green;
                    btn.Click += new EventHandler(btn_Click);
                    Panel2.Controls.Add(btn);
                }
                Panel2.Controls.Add(new LiteralControl("<br/>"));
            }
        }

        protected void btn_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            btn.BackColor = Color.Red;
        }
    }
4

3 に答える 3

1

ここでいくつかの異なる質問をします。
動的ボタン (またはその他のコントロール) を作成できますが、それらをページのライフ サイクル、イベント、およびビュー ステートと同期させるには、ページのライフ サイクルの初期化フェーズで作成する必要があります (そして、私は理解できません)。
変数を「btn」と呼びましたが、ASP.NET でコントロールを識別する方法ではありません。 それぞれに ID (および UniqueID) があり、それらの ID は一意である必要があります。同じイベント ハンドラーをボタンにアタッチする場合、イベント ハンドラーで起動ボタンを見つける必要はありません。これは、イベント処理メソッドの一部として受け取る送信者オブジェクトです。

この msdn ページを読むことを強くお勧めします。このページには、質問した内容がすべて説明されています。

于 2012-06-15T18:30:08.057 に答える
0

ASP.NET コントロールに同じ ID を指定しても、目的の結果が得られません。ボタンの色を変更することが唯一の要件である場合、次の理由から JQuery を使用することを強くお勧めします。

  1. 実装が簡単で、クライアントで実行されるため、非常に高速です
  2. 適切なセレクターを使用して、クリックされたボタンの数を簡単に取得できます (ID、CSSClass、またはボタンの名前など、ボタンの任意のプロパティを使用できます。

私のアドバイス:

  1. JQuery では、ドキュメントの読み込み時に、異なる ID で同じ名前 ("btn" など) の入力 (type=button) を追加します。
  2. 「btn」という名前のすべてのボタンのボタンクリックをリッスンする別のイベントを JQuery に記述します。その関数内で、Style プロパティを使用してボタンの色を変更します。
  3. 最後に、赤いボタンの数を知りたい場合は、スタイルの適切なセレクターを使用して JQuery を使用することでも可能です。
于 2012-06-15T18:53:59.997 に答える
0

必要なことは、各 Button.Click でイベント ハンドラーをフックすることだけです。これにより、送信者がボタンとして設定されるため、それをボタンにキャストして、その色を赤に設定できます。同じ方法で、いくつかのローカル フィールドを増やして赤いボタンの数を増やします。

次のような疑似コード:

       int red_ = 0;
    void Method()
    {
        for(int i=0; i< 100; i++)
        {

            Button btn = new Button();
            btn.Click += new EventHandler(btn_Click);
        }
    }

    void btn_Click(object sender, RoutedEventArgs e)
    {
        Button btn = sender as Button;
        // set btn to red
        red_++;
    }
于 2012-06-15T18:29:31.230 に答える