void CFindDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 m_Listbox.ResetContent(); //清空列表框的内容 CString name; //获取当前选中项 int index = m_comboName.GetCurSel(); //获取组合框当前内容 m_comboName.GetLBText(index, name); CInfoFile file; file.ReadDocline(); for (list<stu>::iterator it = file.ls.begin(); it != file.ls.end(); it++) { CStringA str; char* strname; str = name; //CString 转CStringA strname = str.GetBuffer();//CString 转为char * if (it->name == strname) { const char* szID = "学号:"; const char* szName = "姓名:"; const char* szAge = "年龄:"; const char* szGrade = "成绩:"; CString strID(szID), strName(szName), strAge(szAge), strGrade(szGrade); CString str; str.Format(_T("%d"), it->id); str = strID + str + _T("\r\n"); m_Listbox.AddString(str); str = CString(it->name.c_str()); str = strName + str + _T("\r\n"); m_Listbox.AddString(str); str.Format(_T("%d"), it->age); str = strAge + str + _T("\r\n"); m_Listbox.AddString(str); str.Format(_T("%d"), it->grade); str = strGrade + str + _T("\r\n"); m_Listbox.AddString(str); } } }为什么输出在列表框内的内容顺序是倒着的,先输出成绩最后输出学号
时间: 2024-01-21 22:03:08 浏览: 87
这段代码中,每次添加字符串到列表框中时,都是将新的字符串添加到了列表框的末尾。所以最终输出的顺序是按照添加的顺序倒序排列的,因为先添加的字符串会在后面。
如果希望按照一定的顺序输出字符串,可以将字符串先存储到一个数组或者列表中,然后再按照需要的顺序添加到列表框中。
比如,可以先定义一个存储字符串的列表:
```
std::vector<CString> strList;
```
然后在循环中将需要输出的字符串添加到列表中:
```
strList.push_back(strID + str + _T("\r\n"));
strList.push_back(strName + str + _T("\r\n"));
strList.push_back(strAge + str + _T("\r\n"));
strList.push_back(strGrade + str + _T("\r\n"));
```
最后将列表中的字符串按照需要的顺序添加到列表框中:
```
for (int i = 0; i < strList.size(); i++) {
m_Listbox.AddString(strList[i]);
}
```
这样就可以按照需要的顺序输出字符串了。
相关问题
void Cm1Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 COLORREF m_Color = RGB(0, 0, 0); // 默认为黑色 } void CMyDialog::OnButtonColor() { CColorDialog dlg(m_Color, CC_FULLOPEN, this); if (dlg.DoModal() == IDOK) { m_Color = dlg.GetColor(); } }修正这段代码
根据你提供的代码,你可能存在以下问题:
1. 在 `OnBnClickedButton1` 函数中定义 `m_Color` 变量,这样会导致该变量的作用域仅限于该函数,无法在其他函数中使用。
2. 在 `OnButtonColor` 函数中直接访问 `m_Color` 变量,但该变量并未定义在该函数的作用域中,需要将其定义在类的成员变量中。
因此,你可以根据以下代码进行修正:
```
// 在 Cm1Dlg 类的头文件中添加成员变量
class Cm1Dlg : public CDialogEx {
...
private:
COLORREF m_Color = RGB(0, 0, 0); // 默认为黑色
};
// 在 Cm1Dlg.cpp 文件中修改 OnBnClickedButton1 函数
void Cm1Dlg::OnBnClickedButton1() {
CColorDialog dlg(m_Color, CC_FULLOPEN, this);
if (dlg.DoModal() == IDOK) {
m_Color = dlg.GetColor();
}
}
// 在 Cm1Dlg.cpp 文件中添加 OnPaint 函数
void Cm1Dlg::OnPaint() {
CPaintDC dc(this);
CBrush brush(m_Color);
CBrush* pOldBrush = dc.SelectObject(&brush);
// 绘制图形
dc.SelectObject(pOldBrush);
}
// 在 Cm1Dlg.cpp 文件中添加 OnButtonColor 函数
void Cm1Dlg::OnButtonColor() {
CColorDialog dlg(m_Color, CC_FULLOPEN, this);
if (dlg.DoModal() == IDOK) {
m_Color = dlg.GetColor();
}
}
```
在修正后的代码中,将 `m_Color` 定义为 `Cm1Dlg` 类的成员变量,可以在各个函数中访问。同时,修改了 `OnBnClickedButton1` 函数的实现,使其弹出颜色选择对话框并获取用户选择的颜色,并将其保存到 `m_Color` 变量中。在 `OnPaint` 函数中,创建一个画刷并将其选入设备上下文中,以设置画笔的颜色为当前选择的颜色。在 `OnButtonColor` 函数中,同样弹出颜色选择对话框并获取用户选择的颜色,并将其保存到 `m_Color` 变量中,以更新当前的画笔颜色。
void Draw::OnBnClickedButton1() { //TODO: 在此添加控件通知处理程序代码 t.DoModal();//启动对话框 Invalidate(); //UpdateData(FALSE); t.EllipseTimes; UsedByDraw->SetTimes(t.EllipseTimes);//倍数进来了已经 OnPaint(); }
这段代码是一个MFC框架下的按钮点击事件处理函数。在按钮点击后,它会执行一系列操作:
1. `t.DoModal()`:启动一个对话框。
2. `Invalidate()`:使窗口区域无效,触发重绘操作。
3. `t.EllipseTimes`:获取`t`对象的`EllipseTimes`属性值。
4. `UsedByDraw->SetTimes(t.EllipseTimes)`:将获取到的`EllipseTimes`值设置给`UsedByDraw`对象的`Times`属性。
5. `OnPaint()`:触发窗口的重绘操作。
这段代码的作用是在按钮点击后,启动对话框并根据对话框中的倍数设置窗口的重绘次数。
阅读全文