一个对话框获取另一个对话框控件的值。

syc0616 2008-11-27 10:22:02
我的意思是我在窗体3中有几个控件listcontrol用来显示,从注册表里读出的数据;button用来调用窗体4。
窗体3的listcontrol的行值是用从注册表读出的结构体赋值的,所以窗体4修改是可以的。

我先在想把窗体3中控件listcontrol中选中的行,再点击窗体3中的button,调用窗体4并把窗体3中listcontrol索选的行值显示出来,就是把它行值传到窗体4中并在窗体4中实现修改,然后写回注册表里。

我就是想在3窗体选中的行,在4窗体中获得它的值,把它的值赋值到窗体4中的radio button和check box控件上显示出来。
...全文
421 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
cowcs 2008-11-27
  • 打赏
  • 举报
回复
要不你在窗体3中的button的响应函数中,给dlg4传值就可以了,或者直接在构造函数里
cowcs 2008-11-27
  • 打赏
  • 举报
回复
这样肯定要出错的,dlg4中的Cdlg3 dlg;又重新实例化了一个对象,这个对象和你刚刚实例化过的肯定冲突的。我也说不清楚。
有个偷懒的办法就是用全局变量了。算了,当我没说,要被人骂的
cowcs 2008-11-27
  • 打赏
  • 举报
回复
打完包了,没事了。我做做试试。呵呵,一直想做个这种自定义类互访问的。
syc0616 2008-11-27
  • 打赏
  • 举报
回复
我在对话框3头文件加了
// 对话框数据
enum { IDD = IDD_DIALOG3 };
CListCtrl object_List;
CWnd* pwnd; ///////
在对话框3的CPP加了
BOOL Cdlg3::OnInitDialog()
{
CDialog::OnInitDialog();
pwnd=(CDialog*)::AfxGetApp()->m_pMainWnd; //获得对话框的指针


在对话框4头文件加了
// 对话框数据
enum { IDD = IDD_DIALOG4 };
CWnd* pwnd;
CWnd* plistctrl;

在对话框4的CPP加了
BOOL Cdlg4::OnInitDialog() //对象配置界面显示,不写入注册表
{
CDialog::OnInitDialog();
Cdlg3 dlg;
pwnd=dlg.pwnd;
plistctrl =pwnd->GetDlgItem(IDC_LIST1);
可有错误了,是内存的错误,咋办啊!!!
崩溃了啊!!!!
syc0616 2008-11-27
  • 打赏
  • 举报
回复
弄好了,和大家分享下,
在dlg4中定义变量,在dlg3的button中给dlg4的变量赋值,
再在dlg4的onintal用dlg3传给dlg4变量初始化dlg4的控件的值。
这样就完成了,dlg4的控件根据dlg3的值来赋值了。

真是谢谢大家了。
cowcs 2008-11-27
  • 打赏
  • 举报
回复
那这样如何,你定义一个dlg4 的变量bool ONcheck;
在onbutton 里先判断ONcheck 为FALSE,还是TRUE
然后在dlg4的OnInitDialog() 里再根据ONcheck来调用CheckDlgButton(IDC_CHECK1, BST_UNCHECKED)来设置
如何?你试试。我只是有个想法
syc0616 2008-11-27
  • 打赏
  • 举报
回复
真是万分谢谢了啊!
恩,这个我试了,CheckDlgButton(IDC_CHECK1, BST_UNCHECKED); // 0 check按钮选中 按钮ID IDC_CHECK1
CheckDlgButton(IDC_CHECK1, BST_CHECKED); // 1
他是好使的,但前提IDC号是本窗体的,
所以这里我们用不了,我们调用的是dlg4的。
cowcs 2008-11-27
  • 打赏
  • 举报
回复
这样呢,你自己试下
CheckDlgButton(IDC_CHECK1, BST_UNCHECKED); // 0 check按钮选中 按钮ID IDC_CHECK1
CheckDlgButton(IDC_CHECK1, BST_CHECKED); // 1


BOOL CheckDlgButton(
HWND hDlg, // handle to dialog box
int nIDButton, // button-control identifier
UINT uCheck // check state
);
好像要加
Header: Declared in winuser.h.//头文件
Import Library: Use user32.lib.
syc0616 2008-11-27
  • 打赏
  • 举报
回复
刚才忘掉了,不行啊!错误是 afxwin2.inl
怎么办啊
cowcs 2008-11-27
  • 打赏
  • 举报
回复
setcheck(0)或setcheck(1),试试
可以了吗?
syc0616 2008-11-27
  • 打赏
  • 举报
回复
我想问下,这样dlg.m_radio1.CheckRadioButton = true; ////
dlg.m_check1. ///
怎么赋值啊。我.了可没属性啊!
谢谢两位了。
syc0616 2008-11-27
  • 打赏
  • 举报
回复
谢谢了。我知道了,添加,变量给控件。
Cdlg4 dlg;
int i,iState;
int nltemSelected=object_List.GetSelectedCount(); //获取索选的行
int nltemCount=object_List.GetItemCount(); //表的总数
if(nltemSelected<1) return;
for(i=nltemCount-1;i>=0;i--){
iState=object_List.GetItemState(i,LVIS_SELECTED);
if(iState!=0)
dlg.m_radio1.CheckRadioButton = true; ////
dlg.m_check1. ///这个怎么赋值啊!
}

dlg.DoModal();
cowcs 2008-11-27
  • 打赏
  • 举报
回复
我的dlg4.m_edit是我的edit控件的变量。
那你把listcontrol中的值分别取出来,
然后check box和radio button分别用classwizard定义对应的变量
比如你的listcontrol取出来的是cstring的,那
check box也定义为cstring类型的
syc0616 2008-11-27
  • 打赏
  • 举报
回复
谢谢各位了,cdlg4.m_checkbox1.Checked
dlg4.m_edit是你们在dlg4中定以的控件的名字吗?
可我怎么用不了啊!
syc0616 2008-11-27
  • 打赏
  • 举报
回复
个为大哥们,真是谢谢了。
可不行啊,我在dlg3下加了控件listcontrol;在dlg4下加了check box和radio button;
我是想根据listcontrol中行的值,给dlg4中的check box和radio button赋值。
hhhh63 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 syc0616 的回复:]
谢谢谢谢了,请问下,
你说的button_click() // 点击button
{
CDlg4 cdlg4(100, this);
cdlg4.m_checkbox1.Checked = flse; // 只是例子,根据你的实际来写。
. // 设置其它的。
.
.
cdlg4.DoModal(); // 显示对话框。
}
是加载dlg3中的button下吧,
这就话是什么意思啊!CDlg4 cdlg4(100, this);
[/Quote]

是加在dlg3中的button下

CDlg4 cdlg4(100, this); 在你原来的程序中应该有,可能是这样写的吧:CDlg4 cdlg4;
cowcs 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 syc0616 的回复:]
谢谢了,这样不行啊,想了想,我点击窗体3的button是调用dlg4,而给dlg4赋初始值是在,dlg4的OnInitDialog() 函数里啊!
我该怎么做啊,才能获得dlg3中list control 所选中的行的值啊。
是不是要把它输入到一个文本中,dlg4在从文本中获取它的值。
谢谢啊
[/Quote]
那样就麻烦了,我试过了,按照我上面的做法可以传值的。不用非要在OnInitDialog() 函数里
syc0616 2008-11-27
  • 打赏
  • 举报
回复
谢谢谢谢了,请问下,
你说的button_click() // 点击button
{
CDlg4 cdlg4(100, this);
cdlg4.m_checkbox1.Checked = flse; // 只是例子,根据你的实际来写。
. // 设置其它的。
.
.
cdlg4.DoModal(); // 显示对话框。
}
是加载dlg3中的button下吧,
这就话是什么意思啊!CDlg4 cdlg4(100, this);
syc0616 2008-11-27
  • 打赏
  • 举报
回复
谢谢谢谢了,请问下,
你说的button_click() // 点击button
{
CDlg4 cdlg4(100, this);
cdlg4.m_checkbox1.Checked = flse; // 只是例子,根据你的实际来写。
. // 设置其它的。
.
.
cdlg4.DoModal(); // 显示对话框。
}
是加载dlg3中的button下吧,
这就话是什么意思啊!CDlg4 cdlg4(100, this);
cowcs 2008-11-27
  • 打赏
  • 举报
回复
我试了下,直接在dlg3的button的响应函数中,

Cdlg4 dlg4;
dlg4.m_edit = m_edit1 ;//m_edit1 is a number of dlg3
dlg2.DoModal();
就可以显示了,你试试看行不
加载更多回复(4)

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧