【问题标题】:Make dynamically created radio buttons do a common event使动态创建的单选按钮执行公共事件
【发布时间】:2014-02-13 03:22:27
【问题描述】:

我的表单中有一个名为 Button1 的按钮,以及一个名为 TexBox1 的文本框。

我编写了这样的代码,当我单击按钮时,会创建一个带有自己名称的单选按钮:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace WebApplication7
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState["Counter"] = 0;
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {

            HtmlGenericControl div = new HtmlGenericControl("div");
            for (int i = 0; i < Convert.ToInt32(ViewState["Counter"]); i++)
            {
                RadioButton rb = new RadioButton();
                rb.GroupName = "GN1";
                rb.ID = i.ToString();
                rb.Text = "Button" + i.ToString(); 
                div.Controls.Add(rb);
                Panel1.Controls.Add(div);

            }
            ViewState["Counter"] = Convert.ToInt32(ViewState["Counter"]) + 1;


        }
    }
}

我的问题是,当我单击单选按钮时,我希望 TextBox1.Text 获取单击的单选按钮的文本:

TextBox1.Text=rb.Text;

如何使它适用于任何单选按钮?

【问题讨论】:

    标签: c# events dynamic radio-button


    【解决方案1】:

    在生成RadioButton 控件时,尝试订阅CheckedChanged 事件:

    for (int i = 0; i < Convert.ToInt32(ViewState["Counter"]); i++)
    {
        RadioButton rb = new RadioButton();
        rb.CheckedChanged += (s, a) => TextBox1.Text = ((RadioButton)s).Text;
        ...
        ...
    }
    

    【讨论】:

    • 嗨...感谢您的回复...当我单击它们时没有任何反应...文本框没有任何内容,我需要刷新任何内容、页面或其他内容吗?跨度>
    【解决方案2】:

    你可以使用这个方法:

    private void radioButton_CheckedChanged(object sender, EventArgs e)
    {
        RadioButton btn = sender as RadioButton;
        textBox1.Text = btn.Text;
    }
    

    您需要在创建 RadioBUtton 时将其附加到 Checked Changed 事件

    rb.CheckedChanged += radioButton_CheckedChanged;
    

    【讨论】:

    • 嗨...感谢您的回复....我没有功能“private void radioButton_CheckedChanged(object sender, EventArgs e)”动态创建时...我如何制作按钮自动调用这个函数?
    • 在类中编写该函数,并在创建按钮时使用rb.CheckedChanged += radioButton_CheckedChanged
    • 我照你说的做了,但什么也没做
    • 我认为你没有。
    • @Selman22 我已经把 rb.CheckedChanged += radioButton_CheckedChanged;在 rb.Text = "Button"+i.ToString(); 之后的 protected void Button1_Click(object sender, EventArgs e) 函数中,并使函数 private void radioButton_CheckedChanged(object sender, EventArgs e) 正如你所说的......是不是?
    【解决方案3】:
    RadioButton rb = new RadioButton();
    rb.OnMouseDown+= SomeMethod_Click;
    

    然后你就会有你的方法:

    private void SomeMethod_Click(object sender, RoutedEventArgs e)
    {
        // Here your logic
    }
    

    【讨论】:

    • 您好 @user3215839 只需键入:“rb”。然后点击“ctrl+Space”以显示 Visual Studio intellisense,将出现“OnMouseDown”等可用事件。我用这个事件编辑我的答案。 Here RabioButton on msdn你好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2014-02-23
    相关资源
    最近更新 更多