社区
界面
帖子详情
关于树控件 复选框 打勾的 问题
miaoshengwu
2009-04-08 05:32:25
现在有一棵树,各项前有复选框(check boxes),
当点击根节点,
根节点处于选中状态,
其子节点却是不选中状态。
再点击一次根节点,
此时根节点处于不选中状态,
其子节点却处于选中状态,
有没有办法使它们保持一致?
...全文
568
9
打赏
收藏
关于树控件 复选框 打勾的 问题
现在有一棵树,各项前有复选框(check boxes), 当点击根节点, 根节点处于选中状态, 其子节点却是不选中状态。 再点击一次根节点, 此时根节点处于不选中状态, 其子节点却处于选中状态, 有没有办法使它们保持一致?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
snow_man_J
2012-08-15
打赏
举报
回复
你给的是一个派生类的函数吗,但我不知道怎么用这个派生类啊,楼上的大侠能说说嘛
bearsuper
2009-04-17
打赏
举报
回复
选择树哦,给你例子吧,就给关键函数:
void CTreeEx::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
HTREEITEM hItem = HitTest(point, &nFlags);
BOOL bCheck = GetCheck(hItem);
CTreeCtrl::OnLButtonDown(nFlags, point);
if (hItem != NULL)
{
SelectItem(hItem);
UpdateCheck(hItem);
}
}
void CTreeEx::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CTreeCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
if(nChar==0x20)
{
HTREEITEM hItem = GetSelectedItem();
if (hItem != NULL)
{
UpdateCheck(hItem);
::SendMessage(GetParent()->GetSafeHwnd(), WM_CHECK_CHANGE, NULL, NULL);
}
}
}
void CTreeEx::UpdateCheck(HTREEITEM hItem)
{
BOOL bCheck = GetCheck(hItem);
// 以下遍歷所有子節點, 更新他們的選擇狀態
SetChildCheck(hItem, bCheck);
// 以下遍歷所有兄弟和父節點, 更新他們的選擇狀態
SetParentCheck(hItem, bCheck);
}
void CTreeEx::SetChildCheck(HTREEITEM hItem, BOOL bCheck)
{
HTREEITEM hLeaf;
hLeaf = GetChildItem(hItem);
// 遞歸遍歷所有子節點, 設定他們的狀態
while (hLeaf != NULL)
{
SetChildCheck(hLeaf, bCheck);
SetCheck(hLeaf, bCheck);
hLeaf = GetNextItem(hLeaf, TVGN_NEXT);
}
}
void CTreeEx::SetParentCheck(HTREEITEM hItem, BOOL bCheck)
{
HTREEITEM hParent = GetParentItem(hItem);
HTREEITEM hBrother = GetChildItem(hParent);
BOOL bAllCheck = TRUE;
if (bCheck) // 選中的情況
{
if (hParent != NULL)
{
// 檢視所有的兄弟節點
while (hBrother != NULL)
{
if (!GetCheck(hBrother))
{
bAllCheck = FALSE;
break;
}
hBrother = GetNextItem(hBrother, TVGN_NEXT);
}
if (bAllCheck)
{
SetCheck(hParent, TRUE);
SetParentCheck(hParent, TRUE);
}
}
}
else // 不選的情況
{
// 把所有的父親節點全部置為不選中
if (hParent != NULL)
{
SetParentCheck(hParent, FALSE);
SetCheck(hParent, FALSE);
}
}
}
fishion
2009-04-08
打赏
举报
回复
不会难道GetCheck返回了一个错误的值--!!
miaoshengwu
2009-04-08
打赏
举报
回复
[Quote=引用 5 楼 fishion 的回复:]
你每次点击的时候都用GetCheck检查,是选中状态的话,就其全部子节点SetCheck(TRUE),不是的话选中状态的话就其全部子节点SetCheck(FALSE)
[/Quote]
===========================
子节点的状态都是正确的,
就是我点击的那个节点状态不对,
和它的子节点是反着的,
fishion
2009-04-08
打赏
举报
回复
你每次点击的时候都用GetCheck检查,是选中状态的话,就其全部子节点SetCheck(TRUE),不是的话选中状态的话就其全部子节点SetCheck(FALSE)
miaoshengwu
2009-04-08
打赏
举报
回复
[Quote=引用 2 楼 fishion 的回复:]
添加WM_LBUTTONDOWN事件,用Ctreectrl中的hittest来判断点击是否在根节点上,用GetCheck检查当前的根节点不是不选中状态,是的话其子节点就SetCheck
[/Quote]
==============================
这个我试过,可以的,
但是有一个问题,就是我上面所说的,
根节点处于选中状态时,子节点处于非选中状态,
根节点处于非选中状态时,子节点处于选中状态,
现在是这个问题,该如何解决?
fishion
2009-04-08
打赏
举报
回复
不用WM_LBUTTONDOWN的话,,也可以用TVN_SELECTCHANGING
fishion
2009-04-08
打赏
举报
回复
添加WM_LBUTTONDOWN事件,用Ctreectrl中的hittest来判断点击是否在根节点上,用GetCheck检查当前的根节点不是不选中状态,是的话其子节点就SetCheck
寒冰雪
2009-04-08
打赏
举报
回复
从CTreeCtrl派生一个类,在OnNMClick里添加相关语句
MiniUI 实战演练视频教程
该视频培训课程主要分享MiniUI文本
控件
、按钮
控件
、组合框
控件
、列表
控件
、单选、
复选框
控件
、密码、文本块
控件
、日期选择
控件
、上传
控件
、数据网格
控件
、弹窗、菜单、选项卡、布局等MiniUI的所有知识点。
Winform使用TreeView
控件
实现带
复选框
的三态
树
刚接触c#,项目中用到Treeview实现三态,即选中、未选中、半选中状态,并且要求父子节点选择联动,效果类似下图网上有很多例子,于是研究了一下,结合网上大佬们的例子,所以在这里记录一下。首先新建一个Winform工程拖个TreeView
控件
,然后运行。。。嗯。。。加点数据吧。private void CreateTree() { TreeNode anime = new TreeNode...
C# - 解决TreeView
控件
复选框
联动时鼠标点击过快导致的显示不正确的
问题
今天我在试着做一个C#
树
形视图(TreeView)
控件
,要求在每个节点前面添加一个可用于
打勾
的
复选框
,并要求
复选框
有上下级联动的效果。现在在网上能查到挺多满足这类功能的代码,原本我也以为这是一件挺简单的事情,不过实际情况并非如此。 我们建立一个C#窗体应用程序,主窗体取名FormMain,在...
WinForm学习02
复选框
功能:模拟密码输入时勾选是否显示密码 使用
控件
:checkbox
复选框
逻辑代码 // checkbox 自带的事件,当按键状态改变就会触发回调函数 private void Changedbox(object sender, EventArgs e) { // 获取当前的按键状态 bool ischecked = checkbox.Checked; if (ischecked) {
TreeList
控件
复选框
需要点击两次才能选中(
打勾
)
此
问题
原因是因为t设置了 reelist.OptionsBehavior.AllowIndeterminateCheckState = true 该属性默认为false,改为false即可实现点击一次就可以勾选
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章