首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中检查无线电按钮和显示消息

在C#中检查无线电按钮和显示消息
EN

Stack Overflow用户
提问于 2014-04-20 16:01:12
回答 2查看 1.2K关注 0票数 0

我有一个表格,上面有"listBox1“和"button1”。我有两个功能。第二个函数向listbox1添加复选框,第一个函数显示消息框。但是我不知道怎么写第一个函数。

在这里,我想检查选中哪个复选框并编写一条消息:

代码语言:javascript
复制
private void button1_click(object sender, EventArgs e)
{
    MessageBox.Show("radiobutton: " + rb[i].Text);
}

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

代码语言:javascript
复制
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++;
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-20 16:12:04

您可以通过listBox1.Controls并选择选中的RadioButton

代码语言:javascript
复制
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,不应该有更多的检查

票数 1
EN

Stack Overflow用户

发布于 2014-04-20 16:09:47

第一步是使无线电按钮阵列成为表单级别上的变量:

代码语言:javascript
复制
RadioButton[] rb

在loadSurveys内部分配的

代码语言:javascript
复制
rb = new RadioButton[example.surveys.Length];

然后在您的按钮内单击该数组即可访问。

代码语言:javascript
复制
var rb = rb.FirstOrDefault(r=>r.Checked);
if(rb==null)
    MessageBox.Show("No radiobutton was selected");
else
    MessageBox.Show("radiobutton: " + rb[i].Text);

编辑刚刚注意到您将无线电按钮添加到列表框中。listbox1变量是实际的列表框吗?上面的内容仍然有效,但是如果目标是显示一个列表框的无线电按钮,您可以自定义绘制列表框,否则可以使用普通面板而不是列表框。无论哪种方法,您也可以对listbox1变量控件上的控件执行第一次默认设置(使用OfType),但如果使用列表框并填充其项,则只需使用SelectedIndexChanged

编辑2,因为我已经有了它,想展示一种方法,使您的列表盒一个无线电按钮盒。您可以使用以下类将任何现有的列表框设为无线电按钮盒:

代码语言:javascript
复制
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;
    }
}

标准实现的示例:

代码语言:javascript
复制
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是我经常使用的控件。就我个人而言,我发现更快的实现,然后是一堆单独的无线电按钮。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23184535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档