📄 subject_55453.htm
字号:
<p>
序号:55453 发表者:宗华英雄 发表日期:2003-10-10 01:36:07
<br>主题:急需帮助
<br>内容:在做一个Project时,我新建了一个对话框类,在这个对话框中我添加了一个CComboBox控件!在该Project的另一个类中我用到了该对话框类的对象做为成员变量,但是在成员函数调用AddString()函数为CComboBox添加新的Item(条目)时会出错!根本不能进行添加!且整个程序在编译时没有问题,但是在运行时会报出"Debug Assertion Failed!"错误.当改成Release时,虽然运行时不会报错,但新的Item(条目)依然不能添加到CComboBox控件中去!请各位告诉我为什么会出现这个问题,并指点我如何解决,感激不尽!!!这个问题困扰了我很久,再不解决就来不及完成任务,真是心急如焚!!!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:iwill 回复日期:2003-10-10 08:08:39
<br>内容:只有combo窗口创建后才能调用addstrng,你在其他类中调用是窗口还没有创建
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zry 回复日期:2003-10-10 09:08:12
<br>内容:你有没有给对话框类对象赋值为当前对话框。试试下面的代码:<BR><BR> m_pDlg = (CTest2Dlg*)AfxGetApp()->m_pMainWnd;//m_pDLg是对话框类的对象做 的成员变量<BR> CComboBox*pCombo = (CComboBox*)m_pDlg->GetDlgItem(IDC_COMBO1);//得到CComboBox对象的指针<BR> pCombo->AddString("aaa");
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:宗华英雄 回复日期:2003-10-10 17:53:39
<br>内容:很感谢两位!<BR>我有点疑问想问下zry大哥.我确实没有给对话框类对象赋值为当前对话框。 m_pDlg = (CTest2Dlg*)AfxGetApp()->m_pMainWnd;这行代码应该加在哪呢?且m_pDlg 是对象,能被指针赋值吗?CTest2Dlg是代表什么类啊?希望zry大哥赐教,否则小弟依然不能解决这个问题,感激不尽!!!老师又在催了!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:无情阁东雪 回复日期:2003-10-10 18:33:56
<br>内容:呵呵,“另一个类中我用到了该对话框类的对象做为成员变量”,这个对象只是说明了一个CDialog类对象,但并没有和任何窗口关联,你这时调用它的函数,当然会出错!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:宗华英雄 回复日期:2003-10-10 19:36:29
<br>内容:谢谢rancle,但是请你告诉我具体怎么做好嘛?用代码示范一下,感激不尽!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:goldenfaith 回复日期:2003-10-11 09:30:51
<br>内容:AddString()只能放到你对话框类的函数里(比如初始化之类的)<BR>要想在其他地方增加值,可以把这个值存到全局变量里,如果在程序关闭后还想保留,就存到注册表或ini文件里.在对话框初始话时把它读出来就行了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:宗华英雄 回复日期:2003-10-11 09:55:22
<br>内容:谢谢wujiandao,但是你能不能用代码示范一下,或者说得再具体一点.我是个新手,该怎样存到ini文件里或注册表里,又怎样读出来呢?谢谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:紫龙 回复日期:2003-10-11 10:27:00
<br>内容:这个问题我也遇到过,木一帮我解决了<BR>他的答案是:<BR>第一步:<BR>写一个CSelectDlg的新构造函数<BR> CSelectDlg(CStringArray* strArray,CWnd* pParent); <BR><BR>对应的实现为<BR>CSelectDlg::CSelectDlg (CStringArray* strArray,CWnd* pParent)<BR>:CDialog(CSelectDlg::IDD ,pParent)<BR>{<BR> m_pStrArray = strArray;<BR>}<BR><BR>第二步:给CSelectDlg 增加一个新的私有变量<BR><BR>private:<BR> CStringArray* m_pStrArray;<BR><BR><BR>第三就:重载::OnInitDialog()<BR>BOOL CSelectDlg::OnInitDialog() <BR>{<BR> CDialog::OnInitDialog();<BR> <BR> // TODO: Add extra initialization here<BR> for(int index = 0; index<m_pStrArray->GetSize ();index++)<BR> {<BR> m_select.AddString(m_pStrArray->GetAt(index));<BR> }<BR> return TRUE; // return TRUE unless you set the focus to a control<BR> // EXCEPTION: OCX Property Pages should return FALSE<BR>}<BR><BR>第五步:更改调用接口<BR><BR> CStringArray selects;<BR> selects.Add ("选项1");<BR> selects.Add("选项2");<BR> CSelectDlg dlg(&selects,this);<BR> dlg.DoModal();<BR>........<BR>编译通过<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:宗华英雄 回复日期:2003-10-12 16:30:27
<br>内容:谢谢紫龙兄,的确有用!但我希望的是可以在程序运行期间输入添加项,而不是在程序运行之前把添加项输入进去!而且重新编译后,新添加的项依然会保留!希望紫龙兄赐教!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:紫龙 回复日期:2003-10-12 21:15:10
<br>内容:其实这就是在程序运行的时候加选项,如果要是在程序运行之前把选项加进去根本不用修改调用端口,直接在OnInitDialog中用AddString()就行了,你所说的加入选项后,重新编译后,新添加的项依然会保留,就要涉及到保存问题,你可以用数据库ACCESS或者保存到文本文件中,下次在OnInitDialog中读出数据用AddString()添加就行了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:宗华英雄 回复日期:2003-10-12 23:48:22
<br>内容:紫龙兄,可能是我没说清楚,我说的在运行时添加不是你说的那样!不过没关系,在你写的代码的提示下我已经解决了这个问题,真的谢谢!<BR>正如你说的,我也想保存数据,以实现添加项的保留!但是不知道怎么搞的,不能成功,又找不出哪里错了!你的意思是不是在CSelectDlg类里实现存储功能,把 m_pStrArray存储起来!那你能不能帮我具体写几行代码,我想看看我的哪里错了,万分感谢你不厌其烦的教我!!!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:紫龙 回复日期:2003-10-13 15:52:40
<br>内容:把添加项保存到数组里显然是不行的,因为当程序结束后,它所用的内存要统统销毁。当程序下次运行才回重新分配,所以按你的意思,必须要通过文件或者数据库保存。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:可爱 回复日期:2003-10-13 23:26:04
<br>内容:int index =0;<BR>char str[20];<BR>CString input_string;<BR>char nActual=0;<BR>CFile my_file;<BR>my_file.Open("f:mydata.dat",CFile::modeNoTruncate|CFile::modeWrite);<BR>my_file.Close();<BR>my_file.Open("f:\\mydata.dat",CFile::modeRead);<BR>while(index<int(my_file.GetLength()))<BR>{ input_string="";<BR> my_file.Seek(index,CFile::begin);<BR> nActual=my_file.Read(str,20);<BR> input_string=str;<BR> strArray.Add (input_string);<BR> index=index+20;<BR>}<BR>my_file.Close();//读文件<BR><BR><BR>CFile my_file;<BR> CString output_string;<BR> my_file.Open("f:mydata.dat",CFile::modeCreate|CFile::modeWrite);//打开文件<BR> <BR>for(int index = 0; index<strArray.GetSize ();index++)<BR>{ output_string=strArray.GetAt(index);<BR> my_file.Write(output_string,20);<BR>}//写文件<BR> my_file.Close();
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:可爱 回复日期:2003-10-13 23:28:29
<br>内容:希望对你有帮助!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:宗华英雄 回复日期:2003-10-14 22:40:44
<br>内容:谢谢可爱!!!按你的代码,搞定!也谢谢紫龙兄!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -