zoukankan      html  css  js  c++  java
  • duilib 修复CTreeViewUI复选功能判断不准确的bug

    转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42265209


            CTreeViewUI里面自带了复选的功能,但是复选功能存在bug:

            1)当一个分组下面存在子项时,子项被手动全选后,分组的复选框没有自动变为选中状态


             


            2)当一个分组下面存在子项时,当所有子项都取消选中状态时,分组的复选框还是选中状态


          



            分组的CTreeNodeUI控件应该自动判断是否为选中状态,bug被修复后的效果如下:


          


    修复过程:


           当某个复选框被单击后会触发CTreeViewUI控件的OnCheckBoxChanged函数,这时应该在这里做出判断,来决定分组的选中状态,为此我给CTreeNodeUI控件增加了IsAllChildChecked函数。


          修改后的OnCheckBoxChanged函数如下:


    	bool CTreeViewUI::OnCheckBoxChanged( void* param )
    	{
    		TNotifyUI* pMsg = (TNotifyUI*)param;
    		if(pMsg->sType == _T("selectchanged"))
    		{
    			CCheckBoxUI* pCheckBox = (CCheckBoxUI*)pMsg->pSender;
    			CTreeNodeUI* pItem = (CTreeNodeUI*)pCheckBox->GetParent()->GetParent();
    			SetItemCheckBox(pCheckBox->GetCheck(),pItem);
    
    			if(pItem->GetParentNode() != NULL)  //edit by:Redrain  2014.12.11
    				pItem->GetParentNode()->IsAllChildChecked();
    		
    			return true;
    		}
    		return true;
    	}


            当某个复选框被单击后,去通知他的父控件,让父控件判断是否应该是选中状态。为CTreeNodeUI控件增加的IsAllChildChecked函数如下:


    	void CTreeNodeUI::IsAllChildChecked()
    	{	
    		bool bIsAllChildChecked = true;
    		bool bIsAllChildUncheck = true;
    		int nCount = GetCountChild();
    		if(nCount > 0)
    		{			
    			for(int nIndex = 0;nIndex < nCount;nIndex++)
    			{
    				CTreeNodeUI* pItem = GetChildNode(nIndex);
    				if(!pItem->GetCheckBox()->IsSelected())
    				{
    					bIsAllChildChecked = false;
    				}
    				else
    				{
    					bIsAllChildUncheck = false;
    				}
    			}			
    			if (bIsAllChildChecked && !GetCheckBox()->IsSelected())
    			{
    				GetCheckBox()->Selected(true);
    				return;
    			}
    			else if (bIsAllChildUncheck && GetCheckBox()->IsSelected())
    			{
    				GetCheckBox()->Selected(false);
    				return;
    			}
    			
    		}
    
    	}


    总结:



          bug的修复代码已经提交到我自己的Duilib库。

          我的Duilib库代码下载地址:点击打开链接



      Redrain  2014.12.30

  • 相关阅读:
    尝试了一下写Excel宏的VBA脚本
    PHP类与对象中的private访问控制的疑问
    前端代码的开发及其部署(Ant && YUI Compressor)
    【OI Life】2021 CSPS & NOIP
    【Study】AtCoder DP Contest 做题记录
    新型冠状病毒全国疫情Api接口
    Visual Studio 2022 密钥
    第一屏层固定位置,滚动页面层固定在源位置
    开源PHP开发框架Yii全方位教程
    jQTransform 表单控件样式
  • 原文地址:https://www.cnblogs.com/redrainblog/p/4209715.html
Copyright © 2011-2022 走看看