c++ - MFC CListCtrl::SetItemText() 不工作

标签 c++ visual-studio-2010 visual-c++ mfc

我是构建 MFC 应用程序的初学者。我刚刚开始使用列表控件(在报 TableView 中),但在更新列表时遇到了一些问题。我有三个按钮用于添加、更新和删除。除更新外,一切正常。这是代码。

void CAddDetailsDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX); 
    DDX_Control(pDX, IDC_DEPARTMENT, departmentControl);
    DDX_Text(pDX, IDC_NAME, m_name);
    DDX_Text(pDX, IDC_ID, m_id);
    DDX_Text(pDX, IDC_AGE_BUDDY, m_ageVariable);
    DDX_CBString(pDX, IDC_DEPARTMENT, m_department);
    DDX_Control(pDX, IDC_LIST1, m_listControl);
}

BOOL CAddDetailsDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    // TODO:  Add extra initialization here 
    ageSpin=reinterpret_cast<CSpinButtonCtrl*>(GetDlgItem(IDC_AGE_SPIN));   
    ageBuddy=reinterpret_cast<CEdit*>(GetDlgItem(IDC_AGE_BUDDY));   
    ageSpin->SetBuddy((ageBuddy));
    ageSpin->SetRange32(18,60);     
    departmentControl.AddString("Human Resource");
    departmentControl.AddString("Manager");
    departmentControl.AddString("Administrator");
    departmentControl.AddString("Desktop Engineer");

    m_listControl.InsertColumn(0,"ID",0,100);
    m_listControl.InsertColumn(1,"Name",0,100);
    m_listControl.InsertColumn(2,"Age",0,60);
    m_listControl.InsertColumn(3,"Department",0,100);       
    m_listControl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT );

    m_ageVariable="18";
    UpdateData(FALSE);

    return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
}
void CAddDetailsDlg::OnBnClickedEdit()
{
    // TODO: Add your control notification handler code here    
    UpdateData();
    if((m_id=="")||(m_name=="")||(m_department=="")||(m_ageVariable==""))
    {
        MessageBox("Please choose an item to edit","Error");
    }
    else
    {           
            int index=m_listControl.GetSelectionMark();
            m_listControl.SetItemText(index,0,m_id);
            m_listControl.SetItemText(index,1,m_name);
            m_listControl.SetItemText(index,2,m_ageVariable);
            m_listControl.SetItemText(index,3,m_department);            
            MessageBox("Successfully Updated","Info");       
    }       
}
void CAddDetailsDlg::OnBnClickedNewButton()
{
    // TODO: Add your control notification handler code here    
    UpdateData();
    if((m_id=="")||(m_name=="")||(m_department=="")||(m_ageVariable==""))
    {
        MessageBox("Please fill in all the details","Error");
    }
    else
    {       
        int count=m_listControl.GetItemCount();
        count=m_listControl.InsertItem(count,m_id);
        m_listControl.SetItemText(count,1,m_name);
        m_listControl.SetItemText(count,2,m_ageVariable);
        m_listControl.SetItemText(count,3,m_department);        
    }
}

注意:-

如果我只更新ID,更新功能工作正常。如果我尝试更新所有/许多文件,只有 ID 得到更新,没有其他内容。顺便说一句,age 是一个 spinControl,department 是一个 comboBox,另外两个是 editBox。

编辑:-

我发现,在 m_listControl.SetItemText(index,0,m_id); 这行之后,变量 m_name 的值和 editBox 值都更改为旧值. m_agem_department 也是如此。 如果我注释行 m_listControl.SetItemText(index,0,m_id);,我可以同时更新所有内容,ID 除外。

我可以通过将 m_namem_agem_department 存储在 m_listControl 行之前的局部变量中来更新所有内容。 SetItemText(index,0,m_id); 并在 SetItemText() 中使用这些变量。但在我学习的过程中,我想知道哪里出了问题。

最佳答案

我认为您忘记在 Update_Bn_Click 下的代码之前添加 UpdateData() 因为在我这边,我将您的代码与 updatedata() 一起使用并且工作正常。

UpdateData();
int index=m_List.GetSelectionMark();
m_List.SetItemText(index,0,m_id);
m_List.SetItemText(index,1,m_Name);
m_List.SetItemText(index,2,m_Age);
m_List.SetItemText(index,3,m_DepartMent);

关于c++ - MFC CListCtrl::SetItemText() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35313264/

相关文章:

c++ - 如何强制用户在字符串中输入恰好 8 个字符

c++ - 查找图中两个节点之间的所有路径

c# - 由于Windows系统崩溃,C#解决方案和源文件已损坏

visual-studio - Visual Studio 2010总是认为项目已经过时,但什么都没有改变

c# - 除非我引用该项目,否则无法加载 WinRT 组件

c++ - 对指针的 const 引用未按预期运行

c++ - c++中如何打开注册表并获取具体值

c++ - 继承中的boost库

visual-studio-2010 - 表示UML中的一对多关系

c++ - 什么是 &= 和 |=