search a list control
-
thanks, both the problems are solved.
BYTE m\_M1, m\_M2, m\_M3, m\_M4; TCHAR ss\[50\] = {0}; UpdateData(); int i = -1; LVFINDINFO temp; ipAdd.GetAddress(m\_M1, m\_M2, m\_M3, m\_M4); temp.flags = LVFI\_PARTIAL|LVFI\_STRING; \_stprintf\_s(ss, \_T("%d.%d.%d.%d"), m\_M1, m\_M2, m\_M3, m\_M4); temp.psz = ss; i = ipList.FindItem(&temp); if(radBut1->GetState()) { if(m\_M1 && (i == -1 || lstrcmp(ipList.GetItemText(i, 0), temp.psz) != 0) ) { ipList.InsertItem(s++, (LPCTSTR)ss); ipAdd.ClearAddress(); } } else if(radBut2->GetState()) { if (i != -1 && lstrcmp(ipList.GetItemText(i, 0), temp.psz) == 0) { ipList.DeleteItem(i); s--; } else MessageBox((LPCTSTR)L"Error: Address not found", (LPCTSTR)L"Delete Address", MB\_ICONWARNING | MB\_OK); ipAdd.ClearAddress(); }
I think your code still has some problems. Consider the situation below: There are two items in CListCtrl. 111.111.111.111 111.111.111.11 And you enter 111.111.111.11 to insert the new item, see what happen. If I am right, it will insert successfully!!That may not be what you want.
-
BYTE m_M1, m_M2, m_M3, m_M4;
TCHAR ss[50] = {0};
UpdateData();
ipAdd.GetAddress(m_M1, m_M2, m_M3, m_M4);
_stprintf_s(ss, _T("%d.%d.%d.%d"), m_M1, m_M2, m_M3, m_M4);
int compare;
for (int i = 0; i < ipList.GetItemCount(), ++i)
{
compare = lstrcmp(ss, ipList.GetItemText(i));
if(radBut1->GetState())
{
if(m_M1 && m_M2 && m_M3 && m_M4 && compare != 0)
{
ipList.InsertItem(s++, (LPCTSTR)ss);
ipAdd.ClearAddress();
}
}
else if(radBut2->GetState())
{
if(compare == 0)
ipList.DeleteItem(i);
else
MessageBox((LPCTSTR)L"Error: Address not found", (LPCTSTR)L"Delete Address", MB_ICONWARNING | MB_OK);
ipAdd.ClearAddress();
}
}This is the final version. :)
-
got another solution ---
temp.flags = LVFI_STRING;
and everything becomes right.
modified on Monday, July 20, 2009 5:46 AM
You are right. :)
-
I think your code still has some problems. Consider the situation below: There are two items in CListCtrl. 111.111.111.111 111.111.111.11 And you enter 111.111.111.11 to insert the new item, see what happen. If I am right, it will insert successfully!!That may not be what you want.
-
in that case, 'i' will not be -1 and lstrcmp(ipList.GetItemText(i, 0), temp.psz) will be equal to zero because the item text and temp.psz will be same.
Before you changed the "temp.flags = LVFI_PARTIAL|LVFI_STRING;" to "tem.flags=LVFI_STRING;", it's a wrong case exactly. But now it isn't. :)
-
i have to list control in a mfc dialog application. first one is ipList. i want to search an item in the list.
int i = 0;
TCHAR ss[50] = {0};
ipAdd.GetAddress(m_M1, m_M2, m_M3, m_M4);
_stprintf_s(ss, _T("%d : %d : %d : %d"), m_M1, m_M2, m_M3, m_M4);for(int j=0; j < ipList.GetItemCount(); j++)
{
if(ipList.GetItem(j) != ss)
i=0;
else
i = 1;
}it gives the error ---
error C2664: 'CListCtrl::GetItem' : cannot convert parameter 1 from 'int' to 'LVITEMW *'
what i should do now ? btw thanks
:)
LVFINDINFO temp; CString ff; temp.flags = LVFI\_STRING | LVFI\_PARTIAL; CStdioFile fileh; fileh.Open(L"C:\\\\srvc.txt", CFile::modeRead); int i; do { if(fileh.ReadString(ff)== NULL) { break; } temp.psz = ff.GetBuffer(); i = m\_objListCtrl.FindItem(&temp); if(lstrcmp(m\_objListCtrl.GetItemText(i, 0), temp.psz) == 0) { m\_objListCtrl.SetCheck(i, TRUE); } } while(ff.GetBuffer() != NULL); fileh.Close();
This can work in my computer, but I don't guarantee it could work in your computer. And by the way, I am in school now, but tomorrow I'll back home(There is no computer in my house :) ). It means I could not use computer for a long time. And I can't solve problem together with you, I'm sorry for that..
-
You are right. :)
-
hello, is it possible to make edit control to take only numeric values and limited digits only ??? i have an edit control which is used for the port number, so i want that the user can enter only numeric value and 5 digits. any suggestion ??
Yes, it can. you can set the property of the control to gain what you want. I forget the details, but I am sure it can. My computer do not have a compiler, so I can't take a test.
-
hello, is it possible to make edit control to take only numeric values and limited digits only ??? i have an edit control which is used for the port number, so i want that the user can enter only numeric value and 5 digits. any suggestion ??
If your compiler is VS200X, you can right click the control, and click the "Add Variable" in the pop menus. Then it will pop out a window, and you can set the property in it. If your compiler is VC++6.0, select the control, and in the "View->Class Wizzard->Add Member", I hope I don't misremember.
-
If your compiler is VS200X, you can right click the control, and click the "Add Variable" in the pop menus. Then it will pop out a window, and you can set the property in it. If your compiler is VC++6.0, select the control, and in the "View->Class Wizzard->Add Member", I hope I don't misremember.