我在单文档视图里创建了个列表,双击可以编辑我的想法是编辑完一行的所有单元格后,调用一个函数来保存输入的值(在EndLable得到数据,发消息,再调用函数)
可是现在发现在原先有数据的区域,随便编辑下就会调用那个函数了即使在空白区域添加,也会错误的传值进去,请教各位啊void CComboListCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, pDispInfo->item.pszText); GetParent()->SendMessage(WM_VALIDATE,ID_LIST, (LPARAM)pDispInfo); 

*pResult = 0;
}
LRESULT CVariab::OnEndLabelEditVariableCriteria(WPARAM wParam, LPARAM lParam) 
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)lParam;
CString str1;
CString str2;
CString str3;
CString str4;
// TODO: Add your control notification handler code here

if (wParam == ID_LIST)
{
UpdateData(FALSE);
//int n=m_List.GetItemCount();
//str1=m_List.GetItemText(n,0);
//str2=m_List.GetItemText(n,1);
//str3=m_List.GetItemText(n,2); // Update the item text with the new text
//CString strUpdatedTxt = pDispInfo->item.pszText;

switch(pDispInfo->item.iSubItem)
{
case 0:
str1=pDispInfo->item.pszText;
case 1:
str2=pDispInfo->item.pszText;
case 2:
str3=pDispInfo->item.pszText;
case 3:
str4=pDispInfo->item.pszText;
//break;
default:
break;
}
}
EnumValue(str3);
//int a;
//_stscanf(str3,_T("%d"),&a);
if ((str1&&str2&&str3&&str4)&&str1!="输入数据")
{
AddVar(str1,str2,str4,VarTypeImport);
}
m_List.SetReadOnlyColumns(0);
return 1;
}

解决方案 »

  1.   

    这个这个,其实你可以参考别人关于Edit 树节点的代码看看,其实只是你几个地方的用法问题。
    比如函数的返回值什么的,EndEdit等函数的用法。
      

  2.   

    你应该在鼠标点击另外一行数据时保存,而不是在OnEndlabeledit函数中。在listctrl失去焦点时也应该保存。
      

  3.   

    先判断是否输入了数据。void CComboListCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 

    LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; 
    // TODO: Add your control notification handler code here if (pDispInfo->item.pszText != NULL)
    {
        SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, pDispInfo->item.pszText); 
        GetParent()->SendMessage(WM_VALIDATE,ID_LIST, (LPARAM)pDispInfo);   
    }*pResult = 0; 

      

  4.   


    这样可以吗?原先的单元格里可也是有数据的啊
    还有判断为空与否是用.ISEMPTY()的吧
      

  5.   


    可以。pDispInfo->item.pszText的类型是LPSTR,不是CString,没有IsEmpty()方法。