首页 > 解决方案 > MFC CListBox.AddString() 不显示字符串

问题描述

我正在创建一个 MFC 应用程序并尝试在对话框类中添加列表框。当我使用调试配置时,它会出错并且应用程序崩溃。当我使用发布配置时,对话框显示,但为空。

我刚开始,所以我的代码是基本的:

//code... (it is including #include "MyDialog.h") 

CMyDialog dialog; //CMyDialog includes public CListBox variable m_listBox
CString str;
str = L"Hello";
dialog.m_listBox.AddString(str);
dialog.DoModal();

//code...

但无论如何它都不起作用。

在调试配置中,我收到以下消息:“调试断言失败!” 调试断言失败!

在发布配置中,对话框是空的(而不是带有“Hello”的一行):

我的对话:

我的对话.

该错误发生在调用 AddString() 函数的那一刻,即使在 CMyDialog 类中调用该函数时也会发生该错误(例如,我试图在构造函数中调用它)。

我想知道我做错了什么,我想问题不在于对话框类本身,而在于其他地方。我试图通过互联网搜索,但我没有找到解决方案,所以我在这里:)

标签: c++visual-studiomfcclistbox

解决方案


您做错的事情是m_listBox过早地尝试使用成员 ( )。作为对话框控件的成员,与 CString 成员等非窗口类型相反,只有在使用 调用对话框后才能使用DoModal()

断言是调试宏,这就是为什么您在发布配置中看不到问题的原因。

填充列表框控件的正确位置通常是OnInitDialog覆盖成员函数。然后该阶段已调用该对话框,并且该对话框拥有的控件将具有窗口句柄并且可以使用。

如果您特别想在调用对话框之前将字符串文字传递给对话框,那么您可以将 CString 作为对话框类的成员变量。这样的成员存在于类实例的构造中,并且可以通过构造函数、公共设置器或具有公共可访问性来设置。


推荐阅读