list control
-
hello I am trying to make a list control , so that it will display both name and number when i enter them. 1) how do i delete an item from the list control ie void CSpeedDial::OnSpeedDel() { // } 2)how do i move an item up or down in the list contol using "up buttom" and "down buttom" i have created ie void CSpeedDial::OnSpeedUp() { } and void CSpeedDial::OnSpeedDown() { } 3)how do i make the "add buttom" disable when i have 8 items in the list control. this is what I have done so far: BOOL CSpeedDial::OnInitDialog() { CDialog::OnInitDialog(); CRect rect; m_speedList.GetClientRect(&rect); m_speedList.InsertColumn(0,_T("Name"),LVCFMT_LEFT,rect.Width()/2,0); m_speedList.InsertColumn(1,_T("Number"),LVCFMT_LEFT,rect.Width()/2,0); m_speedList.SetImageList(&imList, LVSIL_SMALL); for (int i=0;i< m_speedArray.GetSize();i++) { m_speedList.InsertItem(i,m_speedArray.GetAt(i)); } // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSpeedDial::OnSpeedAdd() { // TODO: Add your control notification handler code here CString AliasName,AliasNumber; m_speedName.GetWindowText(AliasName); m_speedNumber.GetWindowText(AliasNumber); AliasName.TrimRight(); AliasName.TrimLeft(); AliasNumber.TrimLeft(); AliasNumber.TrimRight(); if(AliasName.FindOneOf("=|")>=0) return; int nIndex = m_speedList.InsertItem(m_speedList.GetItemCount(),AliasName); m_speedList.SetItemText(nIndex,1,AliasNumber); m_speedName.SetWindowText(_T("")); m_speedNumber.SetWindowText(_T("")); } thanks for you help
-
hello I am trying to make a list control , so that it will display both name and number when i enter them. 1) how do i delete an item from the list control ie void CSpeedDial::OnSpeedDel() { // } 2)how do i move an item up or down in the list contol using "up buttom" and "down buttom" i have created ie void CSpeedDial::OnSpeedUp() { } and void CSpeedDial::OnSpeedDown() { } 3)how do i make the "add buttom" disable when i have 8 items in the list control. this is what I have done so far: BOOL CSpeedDial::OnInitDialog() { CDialog::OnInitDialog(); CRect rect; m_speedList.GetClientRect(&rect); m_speedList.InsertColumn(0,_T("Name"),LVCFMT_LEFT,rect.Width()/2,0); m_speedList.InsertColumn(1,_T("Number"),LVCFMT_LEFT,rect.Width()/2,0); m_speedList.SetImageList(&imList, LVSIL_SMALL); for (int i=0;i< m_speedArray.GetSize();i++) { m_speedList.InsertItem(i,m_speedArray.GetAt(i)); } // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSpeedDial::OnSpeedAdd() { // TODO: Add your control notification handler code here CString AliasName,AliasNumber; m_speedName.GetWindowText(AliasName); m_speedNumber.GetWindowText(AliasNumber); AliasName.TrimRight(); AliasName.TrimLeft(); AliasNumber.TrimLeft(); AliasNumber.TrimRight(); if(AliasName.FindOneOf("=|")>=0) return; int nIndex = m_speedList.InsertItem(m_speedList.GetItemCount(),AliasName); m_speedList.SetItemText(nIndex,1,AliasNumber); m_speedName.SetWindowText(_T("")); m_speedNumber.SetWindowText(_T("")); } thanks for you help
-
hello I am trying to make a list control , so that it will display both name and number when i enter them. 1) how do i delete an item from the list control ie void CSpeedDial::OnSpeedDel() { // } 2)how do i move an item up or down in the list contol using "up buttom" and "down buttom" i have created ie void CSpeedDial::OnSpeedUp() { } and void CSpeedDial::OnSpeedDown() { } 3)how do i make the "add buttom" disable when i have 8 items in the list control. this is what I have done so far: BOOL CSpeedDial::OnInitDialog() { CDialog::OnInitDialog(); CRect rect; m_speedList.GetClientRect(&rect); m_speedList.InsertColumn(0,_T("Name"),LVCFMT_LEFT,rect.Width()/2,0); m_speedList.InsertColumn(1,_T("Number"),LVCFMT_LEFT,rect.Width()/2,0); m_speedList.SetImageList(&imList, LVSIL_SMALL); for (int i=0;i< m_speedArray.GetSize();i++) { m_speedList.InsertItem(i,m_speedArray.GetAt(i)); } // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSpeedDial::OnSpeedAdd() { // TODO: Add your control notification handler code here CString AliasName,AliasNumber; m_speedName.GetWindowText(AliasName); m_speedNumber.GetWindowText(AliasNumber); AliasName.TrimRight(); AliasName.TrimLeft(); AliasNumber.TrimLeft(); AliasNumber.TrimRight(); if(AliasName.FindOneOf("=|")>=0) return; int nIndex = m_speedList.InsertItem(m_speedList.GetItemCount(),AliasName); m_speedList.SetItemText(nIndex,1,AliasNumber); m_speedName.SetWindowText(_T("")); m_speedNumber.SetWindowText(_T("")); } thanks for you help
jokefake wrote:
- how do i delete an item from the list control
By using the
DeleteItem()
method.jokefake wrote:
2)how do i move an item up or down in the list contol using "up buttom" and "down buttom" i have created
By deleting it and inserting it into the correct location.
jokefake wrote:
3)how do i make the "add buttom" disable when i have 8 items in the list control.
By using the
EnableWindow()
method.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
hello I am trying to make a list control , so that it will display both name and number when i enter them. 1) how do i delete an item from the list control ie void CSpeedDial::OnSpeedDel() { // } 2)how do i move an item up or down in the list contol using "up buttom" and "down buttom" i have created ie void CSpeedDial::OnSpeedUp() { } and void CSpeedDial::OnSpeedDown() { } 3)how do i make the "add buttom" disable when i have 8 items in the list control. this is what I have done so far: BOOL CSpeedDial::OnInitDialog() { CDialog::OnInitDialog(); CRect rect; m_speedList.GetClientRect(&rect); m_speedList.InsertColumn(0,_T("Name"),LVCFMT_LEFT,rect.Width()/2,0); m_speedList.InsertColumn(1,_T("Number"),LVCFMT_LEFT,rect.Width()/2,0); m_speedList.SetImageList(&imList, LVSIL_SMALL); for (int i=0;i< m_speedArray.GetSize();i++) { m_speedList.InsertItem(i,m_speedArray.GetAt(i)); } // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSpeedDial::OnSpeedAdd() { // TODO: Add your control notification handler code here CString AliasName,AliasNumber; m_speedName.GetWindowText(AliasName); m_speedNumber.GetWindowText(AliasNumber); AliasName.TrimRight(); AliasName.TrimLeft(); AliasNumber.TrimLeft(); AliasNumber.TrimRight(); if(AliasName.FindOneOf("=|")>=0) return; int nIndex = m_speedList.InsertItem(m_speedList.GetItemCount(),AliasName); m_speedList.SetItemText(nIndex,1,AliasNumber); m_speedName.SetWindowText(_T("")); m_speedNumber.SetWindowText(_T("")); } thanks for you help
1)Try
CListCtrl::DeleteItem
2)TryLVN_KEYDOWN
Notification after adding notify_reflect 3)TryLVN_INSERTITEM
Notification and keep a counter along with theLVN_DELETEITEM
were you will decrement it and wen it becomes 8 disable it . Regards, FarPointer Blog:FARPOINTER -
jokefake wrote:
- how do i delete an item from the list control
By using the
DeleteItem()
method.jokefake wrote:
2)how do i move an item up or down in the list contol using "up buttom" and "down buttom" i have created
By deleting it and inserting it into the correct location.
jokefake wrote:
3)how do i make the "add buttom" disable when i have 8 items in the list control.
By using the
EnableWindow()
method.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
i did sth like this but it is not working void CSpeedDial::OnSpeedDelete() { POSITION pos = m_speedList.GetFirstSelectedItemPosition(); if(pos == NULL) return; int index = m_speedList.GetNextSelectedItem(pos); if(index<0 || index>m_speedList.GetItemCount()|| m_speedList.GetItemCount()!= m_speedArray.GetSize()) return; m_speedList.DeleteItem(index); m_speedArray.RemoveAt(index); // TODO: Add your control notification handler code here }
-
1)Try
CListCtrl::DeleteItem
2)TryLVN_KEYDOWN
Notification after adding notify_reflect 3)TryLVN_INSERTITEM
Notification and keep a counter along with theLVN_DELETEITEM
were you will decrement it and wen it becomes 8 disable it . Regards, FarPointer Blog:FARPOINTERi try sth like this but is not working void CSpeedDial::OnSpeedDelete() { POSITION pos = m_speedList.GetFirstSelectedItemPosition(); if(pos == NULL) return; int index = m_speedList.GetNextSelectedItem(pos); if(index<0 || index>m_speedList.GetItemCount()|| m_speedList.GetItemCount()!= m_speedArray.GetSize()) return; m_speedList.DeleteItem(index); m_speedArray.RemoveAt(index); // TODO: Add your control notification handler code here }
-
i did sth like this but it is not working void CSpeedDial::OnSpeedDelete() { POSITION pos = m_speedList.GetFirstSelectedItemPosition(); if(pos == NULL) return; int index = m_speedList.GetNextSelectedItem(pos); if(index<0 || index>m_speedList.GetItemCount()|| m_speedList.GetItemCount()!= m_speedArray.GetSize()) return; m_speedList.DeleteItem(index); m_speedArray.RemoveAt(index); // TODO: Add your control notification handler code here }
jokefake wrote:
i did sth like this but it is not working
So what's not working with it? You've got a lot of code there that needs to be narrowed down to just a single statement or two. Set breakpoints. Use the debugger. Step into the code to see what is going on. The first thing to try is this:
void CSpeedDial::OnSpeedDelete()
{
m_speedList.DeleteItem(0);
}If this works, then you know what the problem is not.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
jokefake wrote:
i did sth like this but it is not working
So what's not working with it? You've got a lot of code there that needs to be narrowed down to just a single statement or two. Set breakpoints. Use the debugger. Step into the code to see what is going on. The first thing to try is this:
void CSpeedDial::OnSpeedDelete()
{
m_speedList.DeleteItem(0);
}If this works, then you know what the problem is not.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
Why don't you share with others what the resolution was?
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
Why don't you share with others what the resolution was?
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
i just removed some of the lines from the code void CSpeedDial::OnSpeedDelete() { POSITION pos = m_speedList.GetFirstSelectedItemPosition(); int index = m_speedList.GetNextSelectedItem(pos); m_speedList.DeleteItem(index); // TODO: Add your control notification handler code here } but how can i move an item up and down in the list i am a beginner
-
i just removed some of the lines from the code void CSpeedDial::OnSpeedDelete() { POSITION pos = m_speedList.GetFirstSelectedItemPosition(); int index = m_speedList.GetNextSelectedItem(pos); m_speedList.DeleteItem(index); // TODO: Add your control notification handler code here } but how can i move an item up and down in the list i am a beginner
jokefake wrote:
i just removed some of the lines from the code void CSpeedDial::OnSpeedDelete() { POSITION pos = m_speedList.GetFirstSelectedItemPosition(); int index = m_speedList.GetNextSelectedItem(pos); m_speedList.DeleteItem(index); // TODO: Add your control notification handler code here }
Which can be shortened to:
void CSpeedDial::OnSpeedDelete()
{
int index = m_speedList.GetNextItem(-1, LVIS_SELECTED);
if (index != -1)
m_speedList.DeleteItem(index);
}jokefake wrote:
but how can i move an item up and down in the list
By deleting it and inserting it into the correct location.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
jokefake wrote:
i just removed some of the lines from the code void CSpeedDial::OnSpeedDelete() { POSITION pos = m_speedList.GetFirstSelectedItemPosition(); int index = m_speedList.GetNextSelectedItem(pos); m_speedList.DeleteItem(index); // TODO: Add your control notification handler code here }
Which can be shortened to:
void CSpeedDial::OnSpeedDelete()
{
int index = m_speedList.GetNextItem(-1, LVIS_SELECTED);
if (index != -1)
m_speedList.DeleteItem(index);
}jokefake wrote:
but how can i move an item up and down in the list
By deleting it and inserting it into the correct location.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
thanks, that code is really short and simple. I tried moving a selected item up in the list control, but it is not working. what may wrong with the code void CTestingDlg::OnUp() { int index = m_cListCtrl.GetNextItem(-1, LVIS_SELECTED); m_cListCtrl.InsertItem(index -1, m_cListCtrl.GetItemText(index, index)); m_cListCtrl.DeleteItem(index +1); // TODO: Add your control notification handler code here }
-
thanks, that code is really short and simple. I tried moving a selected item up in the list control, but it is not working. what may wrong with the code void CTestingDlg::OnUp() { int index = m_cListCtrl.GetNextItem(-1, LVIS_SELECTED); m_cListCtrl.InsertItem(index -1, m_cListCtrl.GetItemText(index, index)); m_cListCtrl.DeleteItem(index +1); // TODO: Add your control notification handler code here }
Delete first, then insert.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
Delete first, then insert.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
deleting it first, deletes the row as i click on the buttom i extracted my code from here. BOOL CListCtrlEx::MoveRow(int from, int to) { //Can't move to the same place, or from or to a negative index if(from == to || from < 0 || to < 0) return FALSE; //First Copy the row to the new location if(CopyRow(from, to)) { //If we have just inserted a row before //this one in the list, we need to increment //our index. if(from > to) DeleteItem(from + 1); else DeleteItem(from); return TRUE; } else return FALSE; } BOOL CListCtrlEx::CopyRow(int from, int to) { //Can't move to the same place, or from or to a negative index if(from == to || from < 0 || to < 0) return FALSE; //Copy the row to the new index InsertItem(to, GetItemText(from, 0)); //If row has been inserted before original //increment the original if(from > to) from++; //Loop through subitems for(int i = 1; i < GetColumnCount(); i++) { SetItemText(to, i, GetItemText(from, i)); } return TRUE; }
-
deleting it first, deletes the row as i click on the buttom i extracted my code from here. BOOL CListCtrlEx::MoveRow(int from, int to) { //Can't move to the same place, or from or to a negative index if(from == to || from < 0 || to < 0) return FALSE; //First Copy the row to the new location if(CopyRow(from, to)) { //If we have just inserted a row before //this one in the list, we need to increment //our index. if(from > to) DeleteItem(from + 1); else DeleteItem(from); return TRUE; } else return FALSE; } BOOL CListCtrlEx::CopyRow(int from, int to) { //Can't move to the same place, or from or to a negative index if(from == to || from < 0 || to < 0) return FALSE; //Copy the row to the new index InsertItem(to, GetItemText(from, 0)); //If row has been inserted before original //increment the original if(from > to) from++; //Loop through subitems for(int i = 1; i < GetColumnCount(); i++) { SetItemText(to, i, GetItemText(from, i)); } return TRUE; }
It's not a good idea to copy code from elsewhere unless you have a good understanding of what it is doing. If the code is doing a specific task and you copy it to a new location, its role will change.
void OnClickMoveUp( void )
{
int nIndex;
CString strCommand;nIndex = m\_listctrl.GetNextItem(-1, LVNI\_SELECTED); ASSERT(-1 != nIndex); strCommand = m\_listctrl.GetItemText(nIndex, 0); m\_listctrl.DeleteItem(nIndex); nIndex = m\_listctrl.InsertItem(nIndex - 1, strCommand);
}
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
It's not a good idea to copy code from elsewhere unless you have a good understanding of what it is doing. If the code is doing a specific task and you copy it to a new location, its role will change.
void OnClickMoveUp( void )
{
int nIndex;
CString strCommand;nIndex = m\_listctrl.GetNextItem(-1, LVNI\_SELECTED); ASSERT(-1 != nIndex); strCommand = m\_listctrl.GetItemText(nIndex, 0); m\_listctrl.DeleteItem(nIndex); nIndex = m\_listctrl.InsertItem(nIndex - 1, strCommand);
}
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
thanks, it works perfectly with a list with only one column, what about if you have 2 columns
jokefake wrote:
it works perfectly with a list with only one column, what about if you have 2 columns
Multiple calls to
GetItemText()
, for starters.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
jokefake wrote:
it works perfectly with a list with only one column, what about if you have 2 columns
Multiple calls to
GetItemText()
, for starters.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
i did sth like this and the result was no good at all void CTestingDlg::OnUp() { int nIndex; CString strCommand,strCommand2; nIndex = m_cListCtrl.GetNextItem(-1, LVNI_SELECTED); ASSERT(-1 != nIndex); strCommand = m_cListCtrl.GetItemText(nIndex, 0); strCommand2 = m_cListCtrl.GetItemText(0,nIndex); m_cListCtrl.DeleteItem(nIndex); nIndex = m_cListCtrl.InsertItem(nIndex - 1, strCommand); m_cListCtrl.SetItemText(nIndex-1,1, strCommand2); }
-
i did sth like this and the result was no good at all void CTestingDlg::OnUp() { int nIndex; CString strCommand,strCommand2; nIndex = m_cListCtrl.GetNextItem(-1, LVNI_SELECTED); ASSERT(-1 != nIndex); strCommand = m_cListCtrl.GetItemText(nIndex, 0); strCommand2 = m_cListCtrl.GetItemText(0,nIndex); m_cListCtrl.DeleteItem(nIndex); nIndex = m_cListCtrl.InsertItem(nIndex - 1, strCommand); m_cListCtrl.SetItemText(nIndex-1,1, strCommand2); }
jokefake wrote:
strCommand2 = m_cListCtrl.GetItemText(0,nIndex);
Should be:
strCommand2 = m_cListCtrl.GetItemText(nIndex, 1);
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
-
jokefake wrote:
strCommand2 = m_cListCtrl.GetItemText(0,nIndex);
Should be:
strCommand2 = m_cListCtrl.GetItemText(nIndex, 1);
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb