簡體   English   中英

MFC CListCtrl :: SetItemText()不起作用

[英]MFC CListCtrl::SetItemText() not working

我是構建MFC應用程序的初學者。 我剛開始使用列表控件(在報表視圖中),我在更新列表時遇到了一些問題。 我有三個按鈕用於添加,更新和刪除。 除了更新之外,一切都運行良好。 這是代碼。

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而不會更新。 BTW,age是一個spinControl,department是一個comboBox,另外兩個是editBox。

編輯:-

我發現變量m_name和editBox值的值都變為行m_listControl.SetItemText(index,0,m_id);之后的舊值m_listControl.SetItemText(index,0,m_id); 它與m_agem_department情況相同。 如果我注釋行m_listControl.SetItemText(index,0,m_id); ,除了ID ,我可以一次更新所有內容。

我可以通過將m_namem_agem_department存儲在行m_listControl.SetItemText(index,0,m_id);之前的局部變量中來更新所有內容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);

更新項目后嘗試提取一些消息。

while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

關閉你的排序。 在您的設計器中:屬性>行為>排序設置為無。

您必須先將Item添加到0 colomn index中。

listcontrol-> InsertItem(0,_T( “文本”));

然后,您可以將文本設置為subItem;

listctrol-> SetItemText(0,1,_T(潛台詞)):

首先,確保控件的Owner Data屬性設置為FALSE。

也許在最后一個SetItemText()之后嘗試m_List.Update(index) SetItemText()

我必須承認,在我需要更新列表元素的任何地方,我使用所有者數據CListCtrl因為我認為在大量項目的情況下它更快,並且在長期內更容易處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM