小弟正在做课程设计----图书管理系统,想实现搜索功能。
在主对话框的列表控件中添加一些书籍信息,然后点级主对话框上的搜索按钮调用子对话框1。
在子对话框1(Search)的编辑框中输入需要的keyword,然后点击子对话框1上的一个搜索按钮进行搜索,将符合条件的结果显示在子对话框2(Result)的列表控件中。
但每次无法调出子对话框2,而是弹出一个对话框显示Debug Assertion Failed!
子对话框2(Result)已在类向导里添加OnInitDialog()虚函数,代码如下:
void Result::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_listc1);
}
BEGIN_MESSAGE_MAP(Result, CDialogEx)
END_MESSAGE_MAP()
// Result 消息处理程序
int m_nFlag;
BOOL Result::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
//ListControl设置
// m_listc1.EnsureVisible(i, FALSE);
//选择时光带覆盖一行(而不是行首的一个项目)
m_listc1.SetExtendedStyle(m_listc1.GetExtendedStyle()
| LVS_EX_FULLROWSELECT);
//设置列标题
m_listc1.InsertColumn(0, _T("书名"), LVCFMT_LEFT, 100); // 插入列(vs2013要在名字前加上一个“_T”)
m_listc1.InsertColumn(1, _T("作者"), LVCFMT_LEFT, 100);
m_listc1.InsertColumn(2, _T("出版社"), LVCFMT_LEFT, 100);
m_listc1.InsertColumn(3, _T("ISBN"), LVCFMT_LEFT, 100);
m_listc1.InsertColumn(4, _T("索书号"), LVCFMT_LEFT, 100);
//m_listc1.InsertItem(0, NULL); //加上这句
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
主对话框中的搜索按钮代码如下:
void C图书管理系统Dlg::OnBnClickedbtsearchbooks()
{
// TODO: 在此添加控件通知处理程序代码
Search dlg;
dlg.DoModal();
}
子对话框1(Search)中的模糊查询按钮代码如下:
void Search::OnBnClickedbtsearch1()
{
// TODO: 在此添加控件通知处理程序代码
C图书管理系统Dlg mydlg;
Result dlg2;
CString str, tempstr;
int i, j=0;
CStringArray strArray;
strArray.RemoveAll();
int nCount = 0;//查找结果个数
for (i = 0; i<mydlg.m_listc1.GetItemCount(); ++i)//m_listc1.GetItemCount():获取列表控件的总行数。i:当前行数
{
//str.Format("%d",m_listc1.GetItemCount());//测试函数
//MessageBox(str);//测试函数
tempstr = mydlg.m_listc1.GetItemText(i, 0) + mydlg.m_listc1.GetItemText(i, 1) + mydlg.m_listc1.GetItemText(i, 2) + mydlg.m_listc1.GetItemText(i, 3) + mydlg.m_listc1.GetItemText(i, 4);//将列表控件当前行的所有内容存至tempstr
//MessageBox(tempstr);//测试函数
if (m_edit1 != "" && tempstr.Find(m_edit1, 0) != -1)//若匹配成功(若用户输入的查找内容不为空并且tempstr中包含用户要查找的内容)
{
UpdateData(true);
j = dlg2.m_listc1.InsertItem(0, mydlg.m_listc1.GetItemText(j, 0)); //插入行首列
dlg2.m_listc1.SetItemText(j, 1, mydlg.m_listc1.GetItemText(j, 1)); //设置其它列数据
dlg2.m_listc1.SetItemText(j, 2, mydlg.m_listc1.GetItemText(j, 2)); //设置其它列数据
dlg2.m_listc1.SetItemText(j, 3, mydlg.m_listc1.GetItemText(j, 3)); //设置其它列数据
dlg2.m_listc1.SetItemText(j, 4, mydlg.m_listc1.GetItemText(j, 4)); //设置其它列数据
UpdateData(false);
nCount++;
}
}
if (nCount != 0) //存在查询结果
{
dlg2.DoModal();
}
else
{
MessageBox(_T("无效书目!"), _T("查找结果"), 1);//信息/标题/按钮数
}
}
求教大神解决如何能正确运行子对话框2,显示出查询结果?