我有一个表单,其中“listBox1”和“button1”。 我有两个功能。 第二个函数向listbox1添加复选框,第一个函数显示消息框。 但我不知道如何编写第一个函数。

在这里,我想检查选中的复选框并写入消息:

private void button1_click(object sender, EventArgs e)
{
    MessageBox.Show("radiobutton: " + rb[i].Text);
}

在这里,我创建了复选框://它正在工作

internal void loadSurveys()
{
    WebClient client2 = new WebClient();
    var json = client2.DownloadString("http://www.test.net/api/surveys/?api_key=123");
    JObject data = JObject.Parse(json);
    var example = JsonConvert.DeserializeObject<Example>(json);
    int y = 5;
    int i = 0;
    RadioButton[] rb = new RadioButton[example.surveys.Length];
    String chkBox_name = "";
    String chkBox_text = "";
    foreach (var survey in data["surveys"].Children())
    {
        rb[i] = new RadioButton();
        rb[i].Location = new Point(5, y);
        rb[i].Name = chkBox_name + survey["id"];
        rb[i].Text = chkBox_text + survey["title"];
        rb[i].AutoSize = true;
        this.listBox1.Controls.Add(rb[i]);
        y += 20;
        i++;
    }

}

===============>>#1 票数:1

第一步是使radiobutton数组在表单级别上变量:

RadioButton[] rb

在loadSurveys中分配

rb = new RadioButton[example.surveys.Length];

然后可以在按钮单击内访问该数组

var rb = rb.FirstOrDefault(r=>r.Checked);
if(rb==null)
    MessageBox.Show("No radiobutton was selected");
else
    MessageBox.Show("radiobutton: " + rb[i].Text);

编辑只是注意到你将radiobuttons添加到列表框中。 listbox1变量是否是实际的列表框? 以上仍然有效,但如果目标是显示radiobuttons的列表框,您可以自定义绘制列表框,否则使用普通面板而不是列表框。 无论哪种方式,您还可以对listbox1变量的控件(使用OfType)执行firstordefault,但是如果您使用列表框并填充其项目,则只需使用SelectedIndexChanged

编辑2由于我已经拥有它,想要展示一种方法,使您的列表框成为一个单选按钮框。 您可以使用以下类将任何现有列表框设置为radiobutton框:

public class RadioButtonBoxPainter:IDisposable
{

    public readonly ListBox ListBox;
    public RadioButtonBoxPainter(ListBox ListBox)
    {
        this.ListBox = ListBox;
        ListBox.DrawMode = DrawMode.OwnerDrawFixed;
        ListBox.DrawItem += ListBox_DrawItem;
    }

    void ListBox_DrawItem(object sender, DrawItemEventArgs e)
    {
        if (e.Index == -1) return;
        Rectangle r = e.Bounds;
        r.Width=r.Height;
        bool selected= (e.State & DrawItemState.Selected) > 0;
        e.DrawBackground();
        e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        ControlPaint.DrawRadioButton(e.Graphics, r, selected ? ButtonState.Checked : ButtonState.Normal);
        r.X = r.Right + 2;
        r.Width = e.Bounds.Width - r.X;
        string txt;
        if (ListBox.Site != null && ListBox.Site.DesignMode && e.Index >= ListBox.Items.Count)
            txt = ListBox.Name;
        else
            txt = ListBox.GetItemText(ListBox.Items[e.Index]);
        using (var b = new SolidBrush(e.ForeColor))
            e.Graphics.DrawString(txt, e.Font, b, r);
        if (selected)
        {
            r = e.Bounds;
            r.Width--; r.Height--;
            e.Graphics.DrawRectangle(Pens.DarkBlue, r);
        }
    }

    public void Dispose()
    {
        ListBox.DrawItem -= ListBox_DrawItem;
    }
}

标准实现示例:

public class RadioButtonBox:ListBox
{
    public readonly RadioButtonBoxPainter Painter;

    public RadioButtonBox()
    {
        Painter = new RadioButtonBoxPainter(this);
    }

    [DefaultValue(DrawMode.OwnerDrawFixed)]
    public override DrawMode DrawMode
    {
        get{return base.DrawMode;}
        set{base.DrawMode = value;}
    }
}

RadioButtonBox是我实际使用很多的控件。 就个人而言,我发现在实施一堆单独的无线电按钮时要快得多。

如果您想使用它,并想要一个示例如何在当前代码中实现它,请留下评论,我将添加一个。

===============>>#2 票数:1 已采纳

您可以浏览listBox1.Controls并选择已检查的RadioButton

private void button1_click(object sender, EventArgs e)
{
    var rb = this.listBox1.Controls.OfType<RadioButton>().SingleOrDefault(n => n.Checked);
    if (rb != null)
        MessageBox.Show("radiobutton: " + rb.Text);
}

因为这是RadioButton所以不应该检查多于一个

  ask by user3357400 translate from so

未解决问题?本站智能推荐:

3回复

在C#单选按钮上显示SQL信息

我的C#程序已连接到我的SQL CE数据库。 我使用SQLCEDATAREADER填充程序中的某些文本框。 我的数据库中有一个“性别”列,并且有一个带有Male和Female的单选按钮。 如果数据库中的某个条目在“性别”列中带有“ M”,如何使“男性”单选按钮显示为按下状态? 我试过
2回复

C#中动态面板中的动态单选按钮

我试图在动态创建的面板中创建动态创建的单选按钮,但是我没有收到要完成的工作。 这是我的代码: 我没有收到任何面板或单选按钮,有人看到我犯了错误吗? 谢谢。
1回复

在C#中添加单选按钮和RatingView

在foor循环中,我需要根据obj值创建一个项目: 例如: 等等 如果在C#中创建了多个单选按钮,如何区分单选按钮和等级视图? 就像我如何为创建的每个项目放置标签或ID?
2回复

在C#中从枚举创建RadioButton

我想用一个与枚举值对应的RadioButton对象填充StackPanel 。 每个按钮的处理程序应运行任意计算,该计算采用相应的枚举值。 这是我提出的方法: 例如,假设我希望RadioButton用于枚举FigureHorizontalAnchor 。 我想要每个按钮的动作来
10回复

在C#中使用radioButtons的groupBox的事件处理程序

我在groupBox中有一些radionButtons,我需要做一些我可以称之为“radiobuttons.checked之一”的动作,或者从radiobutton中找出哪些索引被改变了。 我试图在事件列表中找到它,但我找不到合适的事件。 编辑:为了使它更清楚:我需要知道是否存在一些ha
4回复

使用C#中的不同父控件对Windows窗体Radiobutton进行分组

我有一个Windows窗体应用程序,其中我有许多RadioButtons。 这些RadioButton放置在FlowLayoutPanel中 ,它自动为我安排它们。 直接添加到FlowLayoutPanel的所有RadioButton都被分组,这意味着我只能选择其中一个。 但是,其中一些R
2回复

ASP.NET C#-未将RadioButtons分组

我有一个GridView,并在其OnRowDataBound回调中添加一个新单元格,并在该单元格中添加一个RadioButton。 我已经在单选按钮上设置了GroupName,但是我仍然可以一次选择多个按钮。 如何将它们分组,以便只能在该组中选择一个单选按钮。 编辑 -这是我的代码
1回复

我如何在C#中取消选中单选按钮,同时仍然只允许第一个单选按钮可显示?

不知道标题是否有意义,所以这里是完整的上下文: 我在用C#编码。 我制作了一个带有多个UserControl的应用程序,每个控件都有许多文本框和单选按钮。 所有单选按钮都放置在一组2个面板中,如下所示: [ <label> O <radiobutton1text&
1回复

在C#WPF的子菜单中动态添加单选按钮

我想在我的应用程序中使用C#编写并使用WPF实现动态菜单。 子菜单添加功能正常,但是如何添加这种样式的单选按钮? 我读过一些网站,描述必须使用另一个“模板”,但是我找不到适合我的解决方案。 属性item.IsCheckable = true; 对我来说不是解决方案-条目必须
1回复

C#动态单选按钮,更改文本

我有一个函数,每次用户单击按钮时,都会创建X个单选按钮。 代码现在看起来像这样(我也尝试过对它们进行分组)。 现在,我只使用我能想到的最简单的方法。 确实确实创建了X个,但是问题在于何时更新文本。 splitAnsw中的文本确实会更改并在写入时正确显示,但单选按钮中的文本不会更新。