MFC中关于复选框全选

现在我设计了10多个复选框,两个按钮,一个为“全选”,另一个为“反选”,请问如何实现这两个按钮的功能?我认为应该将它们设为一个组,然后通过循环来实现,但代码应该怎么写呢?... 现在我设计了10多个复选框,两个按钮,一个为“全选”,另一个为“反选”,请问如何实现这两个按钮的功能?我认为应该将它们设为一个组,然后通过循环来实现,但代码应该怎么写呢?
感谢两位大哥的回答,不过现在我试了一下,出现下面的问题:运行时只能选中前9个复选框,然后就直接死掉了,反选也是直接死掉,这是为什么呢?另外在按钮函数中创建的i会不会自动在用完后释放内存呢
展开
 我来答
lz3272
推荐于2016-07-18 · TA获得超过333个赞
知道小有建树答主
回答量:258
采纳率:0%
帮助的人:353万
展开全部
void CCListIconDlg::OnButton1() //全选保证IDC_CHECK1到IDC_CHECK4是连续的
{
// TODO: Add your control notification handler code here

for (int i = IDC_CHECK1; i <= IDC_CHECK4; i ++)
{
((CButton*)GetDlgItem(i))->SetCheck(1);

}
}

void CCListIconDlg::OnButton2() //反选
{
// TODO: Add your control notification handler code here

for (int i = IDC_CHECK1; i <= IDC_CHECK4; i ++)
{
if (((CButton*)GetDlgItem(i))->GetCheck())
{
((CButton*)GetDlgItem(i))->SetCheck(0);
}else
((CButton*)GetDlgItem(i))->SetCheck(1);

}
}

死掉 是因为你的控件没有按顺序放,放控件的时候肯定放了其他东西

#define IDC_CHECK1 1004
#define IDC_CHECK2 1005
#define IDC_CHECK3 1006
#define IDC_CHECK4 1007

如果在1004到1007之间放了别的定义就会有问题了如下面的定义
#define IDC_CHECK1 1004
#define IDC_CHECK2 1005
#define IDC_CHECK3 1006
#define IDC_CHECK4 1007
#define IDC_CHECK5 1009
那么到i = 1008的时候就会有问题
xiangjuan314
推荐于2018-04-24 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2867万
展开全部
大致方法如下,可根据实际修改
C#代码:一下是CS下的代码,在页面中只放置了3个按钮和1个CheckBoxList控件
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
//这里是在数据库中取出数据
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["bjfanau"].ConnectionString);
con.Open(); //打开连接
SqlCommand cmd = new SqlCommand("select * from mc_sys", con);
SqlDataReader sdr = cmd.ExecuteReader();
this.CheckBoxList1.DataTextField = "s_title"; //这里是显示的文本的数据库字段
this.CheckBoxList1.DataValueField = "s_id"; //这里是隐藏的值的数据库字段
this.CheckBoxList1.DataSource = sdr;
this.CheckBoxList1.DataBind(); //数据绑定
sdr.Close();
con.Close();
}
}
//这块是做选着完后点提交在页面上答应出复选框的值(注意是值不是文本)
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < CheckBoxList1.Items.Count; i++)
{
if (this.CheckBoxList1.Items[i].Selected)
{
Response.Write(this.CheckBoxList1.Items[i].Value.ToString() + " | ");
}
}
}
//这块是全选按钮的事件,点次按钮就全部CheckBoxList都会被选中
protected void Button2_Click(object sender, EventArgs e)
{
for (int b = 0; b < CheckBoxList1.Items.Count; b++)
{
this.CheckBoxList1.Items[b].Selected = true;
}
}
//这块是全选按钮的事件,点次按钮就全部CheckBoxList全部不选
protected void Button3_Click(object sender, EventArgs e)
{
for (int b = 0; b < CheckBoxList1.Items.Count; b++)
{
this.CheckBoxList1.Items[b].Selected = false;
}
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淦庄念俊艾
2019-06-06 · TA获得超过3900个赞
知道大有可为答主
回答量:3152
采纳率:34%
帮助的人:236万
展开全部
void
CCListIconDlg::OnButton1()
//全选保证IDC_CHECK1到IDC_CHECK4是连续的
{
//
TODO:
Add
your
control
notification
handler
code
here
for
(int
i
=
IDC_CHECK1;
i
<=
IDC_CHECK4;
i
++)
{
((CButton*)GetDlgItem(i))->SetCheck(1);
}
}
void
CCListIconDlg::OnButton2()
//反选
{
//
TODO:
Add
your
control
notification
handler
code
here
for
(int
i
=
IDC_CHECK1;
i
<=
IDC_CHECK4;
i
++)
{
if
(((CButton*)GetDlgItem(i))->GetCheck())
{
((CButton*)GetDlgItem(i))->SetCheck(0);
}else
((CButton*)GetDlgItem(i))->SetCheck(1);
}
}
死掉
是因为你的控件没有按顺序放,放控件的时候肯定放了其他东西
#define
IDC_CHECK1
1004
#define
IDC_CHECK2
1005
#define
IDC_CHECK3
1006
#define
IDC_CHECK4
1007
如果在1004到1007之间放了别的定义就会有问题了如下面的定义
#define
IDC_CHECK1
1004
#define
IDC_CHECK2
1005
#define
IDC_CHECK3
1006
#define
IDC_CHECK4
1007
#define
IDC_CHECK5
1009
那么到i
=
1008的时候就会有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友45d1b26ed
2009-08-01
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
刚写的:
void CFXKDlg::OnBnClickedButton1()//全选
{
// TODO: 在此添加控件通知处理程序代码

CButton *buttom;
for (int i=0;i<10;i++)
{
buttom=(CButton*)GetDlgItem(IDC_CHECK1+i);
buttom->SetCheck(1);

}
}

void CFXKDlg::OnBnClickedButton2()//反选
{
// TODO: 在此添加控件通知处理程序代码
CButton *buttom;
for (int i=0;i<10;i++)
{

buttom=(CButton*)GetDlgItem(IDC_CHECK1+i);
if (buttom->GetCheck())
{
buttom->SetCheck(0);
}
else
buttom->SetCheck(1);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式