C#中单选按钮组如何编写单击事件

技术科 2008-10-09 10:46:39
当前有一个groupBox1,内含3个radioButton(分别为radioButton1,radioButton2,radioButton3),构成一个单选按钮组,且radioButton1默认为选中状态,要求实现效果为:
单击其中任何一个按钮,都会弹出一个MessageBox("单击了第"+X+"个按钮"),要求最少的代码量(不要给每个单选按钮都编写一个click事件)这段代码如何写?
...全文
3446 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiufeng0723 2011-06-28
  • 打赏
  • 举报
回复
为了获得选中的答案值,首先生成其中一个的单选按钮的Click事件处理方法rdoA_Click(),然后将它改名为rdoAnswer_Click()。而后在“属性”窗口中找到其他的单选按钮将他的Click事件处理指向第一个Click事件的方法,也就是改过名字的那个方法“rdoAnswer()”
也就是说一组单选按钮就写一个Click事件,然后將它改下名字,把剩下的单选按钮全都指向一个方法!



pricate void rdoAnswer_Click(object sender,EvevtArgs e)
{
//將sender转换为单选按钮,并获取选中蛋选按钮的值
string answer = ((radioButton)sender).Text;
MessageBox.Show("你选择了"+answer,"提示",MessageBoxButtons.OK,MessageBOxIcon.Information);

//answer是单选按钮的值!
}
tomyfolder 2010-09-03
  • 打赏
  • 举报
回复
哪一个是当程序刚运行时都不加载被选中呀?
mahayu1982 2008-10-16
  • 打赏
  • 举报
回复
楼主的问题用这个方法解:设立一个中间变量i,并且将radioButton2的委托事件放在其他位置加载,就能实现要求!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WFTest
{
public partial class Form1 : Form
{
int i = 0;
public Form1()
{
InitializeComponent();
this.radioButton1.Click += new System.EventHandler(this.radioButton1_Click);
this.radioButton3.Click += new System.EventHandler(this.radioButton1_Click);

}

private void radioButton1_Click(object sender, EventArgs e)
{
switch (((RadioButton)sender).Name)
{
case "radioButton1":
MessageBox.Show("按了第一个radioButton");
i++;
break;

case "radioButton2":
MessageBox.Show("按了第二个radioButton");
i = 2;
break;


case "radioButton3":
MessageBox.Show("按了第三个radioButton");
i++;
break;

default:
break;
}


if (i==1)
{
radioButton2.Click += new EventHandler(radioButton1_Click);
}
}
}
}
justindreams 2008-10-13
  • 打赏
  • 举报
回复
这样做:
在Form的load方法或者构造器里面这样做:
先选中你需要默认的选项,比如radioButton2
然后再去预定事件



private void CheckedChanged(object sender, EventArgs e)
{
MessageBox.Show( ((RadioButton)sender).Name );
}

private void Form1_Load(object sender, EventArgs e)
{
this.radioButton2.Checked=true; //此处先选中默认选项!!
radioButton1.CheckedChanged += new EventHandler(CheckedChanged);
radioButton2.CheckedChanged += new EventHandler(CheckedChanged);
radioButton3.CheckedChanged += new EventHandler(CheckedChanged);
}

justindreams 2008-10-13
  • 打赏
  • 举报
回复
唉,先选中,再预订事件!!!!!
你先预订事件再去选中的话,必然会在你点击之前出现MessageBox的。
止戈而立 2008-10-13
  • 打赏
  • 举报
回复
全局变量:
private bool flag=false;

public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
flag=true;

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}


private void rk(object sender, EventArgs e)
{
if(falg==false)return;
switch (((RadioButton)sender).Name)
{
case "radioButton1":
MessageBox.Show("单击了第1个按钮");
break;
case "radioButton2":
MessageBox.Show("单击了第2个按钮");
break;
case "radioButton3":
MessageBox.Show("单击了第3个按钮");
break;

}
}
zbking 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ZengHD 的回复:]
private void CheckedChanged(object sender, EventArgs e)
{
MessageBox.Show( ((RadioButton)sender).Name );
}

private void Form1_Load(object sender, EventArgs e)
{
radioButton1.CheckedChanged += new EventHandler(CheckedChanged);
radioButton2.CheckedChanged += new EventHandler(CheckedChanged);
r…
[/Quote]

正解,帮顶
止戈而立 2008-10-13
  • 打赏
  • 举报
回复
我的想法是设置一个bool变量,初始值为false,程序启动后才置为true


private void rk(object sender, EventArgs e)
{
if(falg==false)return;
switch (((RadioButton)sender).Name)
{
case "radioButton3":
MessageBox.Show("单击了第3个按钮");
break;
case "radioButton2":
MessageBox.Show("单击了第二个按钮");
break;
case "radioButton1":
MessageBox.Show("单击了第1个按钮");
break;

}
}

止戈而立 2008-10-13
  • 打赏
  • 举报
回复
LZ的意思是,因为其中一个选项默认为选中,程序一启动就会触发Click事件..
bonnibell 2008-10-13
  • 打赏
  • 举报
回复
俺明白楼主的意思,
刚测试了一下
没有问题啊

定义中

//
// panel1
//
this.panel1.Controls.Add(this.radioButton3);
this.panel1.Controls.Add(this.radioButton2);
this.panel1.Controls.Add(this.radioButton1);
this.panel1.Location = new System.Drawing.Point(35, 141);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(246, 100);
this.panel1.TabIndex = 5;
//
// radioButton3
//
this.radioButton3.AutoSize = true;
this.radioButton3.Location = new System.Drawing.Point(35, 81);
this.radioButton3.Name = "radioButton3";
this.radioButton3.Size = new System.Drawing.Size(95, 16);
this.radioButton3.TabIndex = 2;
this.radioButton3.Text = "radioButton3";
this.radioButton3.UseVisualStyleBackColor = true;
this.radioButton3.Click += new System.EventHandler(this.radioButton_Click);
//
// radioButton2
//
this.radioButton2.AutoSize = true;
this.radioButton2.Checked = true;
this.radioButton2.Location = new System.Drawing.Point(35, 47);
this.radioButton2.Name = "radioButton2";
this.radioButton2.Size = new System.Drawing.Size(95, 16);
this.radioButton2.TabIndex = 1;
this.radioButton2.TabStop = true;
this.radioButton2.Text = "radioButton2";
this.radioButton2.UseVisualStyleBackColor = true;
this.radioButton2.Click += new System.EventHandler(this.radioButton_Click);
//
// radioButton1
//
this.radioButton1.AutoSize = true;
this.radioButton1.Location = new System.Drawing.Point(35, 13);
this.radioButton1.Name = "radioButton1";
this.radioButton1.Size = new System.Drawing.Size(95, 16);
this.radioButton1.TabIndex = 0;
this.radioButton1.Text = "radioButton1";
this.radioButton1.UseVisualStyleBackColor = true;
this.radioButton1.Click += new System.EventHandler(this.radioButton_Click);

事件中
private void radioButton_Click(object sender, EventArgs e)
{
if (radioButton1.Checked == true)
{
MessageBox.Show("aaaaa");
}
if (radioButton2.Checked == true)
{
MessageBox.Show("bbbb");
}
if (radioButton3.Checked == true)
{
MessageBox.Show("cccc");
}

}
slin60 2008-10-13
  • 打赏
  • 举报
回复
不是没人能解答,而是你根本就没看明白别人给你的解答
技术科 2008-10-13
  • 打赏
  • 举报
回复
没人能解答么?顶上去.
技术科 2008-10-11
  • 打赏
  • 举报
回复
以上所说的都只能实现一半要求,
(C#桌面程序)
1.构建一个单选按钮组(3个radioButton(分别为radioButton1,radioButton2,radioButton3))
2.将任意一个按钮的checked设为true
3.编写按钮单击事件:按下任意一个按钮时,显示"按下了第几个按钮"!
4.关键一步!启动程序,在单击任意一个按钮之前,不触发任何事件!!
以上就是这个程序的要求,目前还没有能完全实现的!加分求解!
icebear2 2008-10-10
  • 打赏
  • 举报
回复
你是应用在winform中吗?还是在web里阿?
icebear2 2008-10-10
  • 打赏
  • 举报
回复
?radioButton在一个groupBox里只能有一个true阿~
应该是全部设为false,选择时再触发事件吧?
技术科 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 icebear2 的回复:]
private void radioButton_Click(object sender, EventArgs e)
{
if (radioButton1.Checked == true)
{
MessageBox.Show("aaaaa");
}
if (radioButton2.Checked == true)
{
MessageBox.Show("bbbb");
}
if (radioButton3.Checked == true)
{

[/Quote]

还有一个bug!!启动程序后就弹出"bbbb"(radioButton2的Checked 默认设为true),
我的要求是:任意一个按钮默认设为true,启动程序,在单击任意按钮之前,不触发任何事件!!
zhangjie_it 2008-10-10
  • 打赏
  • 举报
回复
你没有click的时候,是不会触发click事件的!
zhangjie_it 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jsship 的回复:]
修改后的代码如下(rk函数已绑定到各按钮的click事件上):

public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}

private void rk(object sender, EventArgs e)
{
switch (((RadioButton)sender).Text)
{
case "radioButton3":
MessageBox.Show(…
[/Quote]

使用click事件是不会出现你说的那种情况的!
ZengHD 2008-10-09
  • 打赏
  • 举报
回复
private void CheckedChanged(object sender, EventArgs e)
{
MessageBox.Show( ((RadioButton)sender).Name );
}

private void Form1_Load(object sender, EventArgs e)
{
radioButton1.CheckedChanged += new EventHandler(CheckedChanged);
radioButton2.CheckedChanged += new EventHandler(CheckedChanged);
radioButton3.CheckedChanged += new EventHandler(CheckedChanged);
}
zhangjie_it 2008-10-09
  • 打赏
  • 举报
回复
要使用委托!
radiobutton_click(object sender,System.Eventargs e)
{
switch((radiobutton)sender.text)
{
case "radiobutton1":
messagebox.show("单击了第一个按钮");
   break;
case "radiobutton2":
messagebox.show("单击了第二个按钮");
break;
..................
}
}
radiobutton1.click+=new SYstem.EventHandler(this.raidobutton_click);
radiobutton2.click+=new SYstem.EventHandler(this.raidobutton_click);
radiobutton3.click+=new SYstem.EventHandler(this.raidobutton_click);
加载更多回复(5)
百姓问问答系统采用asp.net(2.0)c#+access,全站采用html页面,SEO友好,列表页采用AJAX技术,template为模板文件夹,根目录下的template为前台模板文件,admin/template为后台管理文件模板,数据库更改信息在web.config里面。 百姓问问答系统 1.5 Beta 更新日志: 1、修正了,退出错误 2、修正了内容页内容字母过长,变形,更新的显示内容方式 3、增加了模板的标签的错误日志,调试错误更容易 4、修正了发布问题的时候,上传图片处理,扩展名大写不识别 5、增加了友情链接功能 6、增加了会员列表页面 7、更新了问题投票的样式 8、增加了,会员心采纳答案的功能 9、增加后台游客管理 10、会员心增加了,自己的问题看回复直接采纳 网站基本设置: 默认积分:用户注册会员时的初始积分 到期设置:问题的到期时间,用户提问后在规定的天数没有结贴,该问题将自动关闭。 流量统计:利用第三方流量统计代码统计网站的访问量; 基本信息设置:添加关于我们或联系方式等单篇文章(需指定模板)。 其标识是用来识别不同信息内容。在模版里面SQL语句设置。{g:[email protected]_model='about'} 其about为标识。添加后在生成静态页设置添加模板路径和生成静态页路径。单击“点击生成”或“全部生成”按钮即可; 生成静态页设置: 添加您要生成的模板路径及名称和生成静态页的路径及名称,单击“点击生成”生成指定的静态页或“全部生成”,即可生成已添加的所有静态页模版。 生成问题:生成问题管理所有的问题。 生成公告:生成公告管理的所有公告信息。 生成帮助:生成帮助信息所有信息。 删除选:勾选要删除模板的编辑单选框或点击全部生成前的全选单选框,点击删除选按钮即可批量删除站内短信管理您想删除的数据; 站内短信管理: 可以给站内所有注册用户或指定的用户发消息。类型可以为管理员发送或系统发送。收信人不填写时代表给所有用户发消息。填写信息内容后点击发送按钮; 问题分类设置: 问题分类的级别有两种,一级类和二级类。添加分类时首先要确保数据库有一个以上的一级类,才能添加二级分类,注册会员在提问的时候只能选择二级类作为问题的分类。 会员等级设置: 添加会员的级别名称、等级和积分,什么等级对应多少积分; 上传附件管理: 查看和删除专题的图片,单击路径下的连接可预览该图片; 注册会员管理: 添加会员、填写要添加会员的用户名、昵称、密码和,E-mail后点击添加按钮 修改、修改用户的积分或者是否冻结,被冻结的会员不能登录。删除会员操作后要生成首页; 管理员设置: 添加管理员:填写管理员帐号和密码后单击添加按钮,修改管理员密码必须输入原始密码; 热门词管理: 只能修改和删除。不能添加,如想添加只能去数据库手动添加内容。修改之后生成首页; 公告管理: 输入公告标题、公告内容后点击添加,可以修改、删除和查看详细信息,信息确认后在生成静态页设置点击生成公告按钮; 帮助分类管理: 添加输入分类名称后点击添加按钮,显示页面可以修改。确认无误添加帮助信息 帮助标题、选择已添加的帮助分类,填写内容后点击添加按钮。可以查看详细、修改和删除。确认无误后在生成静态页面设置点击声称帮助按钮; 问题管理: 可以通过问题的分类和输入关键字查找指定分类或标题的问题进行操作。可以更改问题的分类,提取问题为专题,审核问题是否通过,查看问题详细,删除和批量删除,删除的同时会删除静态页以及该问题的所有回复内容。操作完成后生成首页。 专题管理: 专题是从问答提取三个经典问题放在首页右边的常识里面,还有内容页里面右侧,为了增加专题的可读性可以对问题提取自定义标题。 在问题提取专题后自动跳转到专题管理页面。可以给指定的专题上传一张图片或者撤销指定的专题。操作完成后生成首页; 回收站管理: 注册用户在“会员心”-“我发布的问题”可以申请删除用户指定的问题,会员申请删除的问题会显示在回收站管理页面,管理员可以删除该问题或者撤销用户的删除请求。删除操作完成以后生成首页; 答案管理: 所有的回复可以查看和删除该回复。操作完成后在生成静态页设置点击生成问题; 采集管理: 收费会员可以远程获取本站的问答数据,可根据分类和关键字获取内容。 只有授权会员提供此功能。 安装说明: 1、检查空间是否支持 .net2.0 版本以上。 2、检查安装目录是否有读取的权限。 3、将空间的默认首页设置为 default.aspx。 4、运行default.aspx进行安装。 5、打开网站正常访问。
为什么要学习服务端渲染 nuxt.js ? 现在我们的项目大多数都是SPA(单页面应用),在实际开发过程单页面应用比之前的模板渲染要好很多,首先单页面应用是前后端分离,架构清晰,前端负责交互逻辑,后端负责数据,前后端单独开发,独立测试。但是,SPA不利于SEO(搜索引擎优化)。让搜索引擎更为信任该网站,通过提升排名获得更多网站流量,对于某些类型的网站是非常有必要的。目前大部分的Vue项目本质是 SPA 应用,React、Angular也都是SPA应用。SPA应用广泛用于对SEO要求不高的场景。在我们开发的过程,我们有 SEO 的需求,我们需要搜索引擎更多地抓取到我们的项目内容,此时我们需要SSR。SSR保证用户尽快看到基本的内容,也使得用户体验性更好。 Nuxt.js 是一个 Node 程序,基于vue.js开发的一套服务端渲染的框架,必须使用 Node 环境。我们对 Nuxt.js 应用的访问,实际上是在访问这个 Node.js 程序的路由,程序输出首屏渲染内容 + 用以重新渲染的 SPA 的脚本代码,而路由是由 Nuxt.js 约定好的 pages 文件夹生成的,开发只需要遵循一定的约定,直接使用vue.js开发我们项目也是非常轻松的。 课程案例 (1) HOME PAGE (2) Jokes Page  (3)About Page  课程概述 在本课程,大喵将使用 nuxt.js + bootstrapVue + json-server 开发实战性质一个入门级项目,带着大家来体验服务端渲染(SSR )项目构建的过程;介绍 nuxt.js项目目录的结构,每个文件夹和文件的基本概念和作用,以及nuxt.config.js 配置文件的基本介绍;页面公共结构处理,路由页面跳转配置处理;axios 接口请求;带着大家来熟悉及掌握 bootstrapVue UI件库的使用;

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧