怎样获得子对话框中某个控件的焦点,使其成为当前指定控件?

时间:2021-08-10 05:48:13
我在主对话框中嵌入了一个子对话框,当点击主对话框上某个按钮,如果子对话框中某个控件(例如Edit控件)中内容为空时,我需要重新将焦点设置到子对话框的Edit控件上,我在子对话框生成的类中调用setFocus()定位不到这个焦点,子对话框的Control选项我也选了,应该怎么办??

13 个解决方案

#1


首先需要子对话框先获取焦点,然后再将焦点转移到Edit控件上。

pChildDialog->SetFocus();
pChildDialog->GetDlgItem(nIDCtrl)->SetFocus();

#2


在父对话框中设置子对话框焦点
然后设置其控件焦点。。

#3


不行啊,那位大侠知道怎么办?

#4


你没有说清楚:
你是不是想这样?在主对话框上有一个按钮,你点击这个按钮激活并显示你的子对话框,默认焦点在Edit1上,但如果子对话框的Edit1为空,就把焦点转移到Edit2?

#5


呵呵,不好意思,是这样的,子对话框有好几个edit,假设有edit1,edit2,edit3。首先在主对话框中将此隐藏的子对话框show出来,同时在主对话框有一个Apply按钮。点击这个确定按钮调用OnApply,实际上在OnApply里面我去调用的是此子对话框中的一个函数,这个函数的功能如下:假如当前光标已在edit3上,它会顺序判断这三个edit是否为空,若edit1为空,则弹出一个messagebox告诉用户edit1不能为空,并把焦点转移到edit1上,等待用户输入。我在这个函数里直接调用edit1.SetFocus()但不能转移到edit1上。此函数执行完返回后继续执行主对话框OnApply中的后面的语句,只有一条语句也就是return  CPropertyPage::OnApply();这条语句该不会又更改焦点把?是不是因为SetFocus()返回的是一个局部变量,当此函数结束返回主对话框时焦点就变成随机的了??如果是该怎么办呢?如果在主对话框中设置此子对话框中edit1的焦点的话,那也破坏了它的封装性啊,而且不单单是一个子对话框,这样做也很麻烦。各位大哥救救我啊!谢谢。

#6


有人知道么?

#7


你可以试试直接在父窗口中设置edit焦点是否起作用

#8


不行啊

#9


简单的方法是你贴一段代码出来,你的那个OnApply()

#10


将对话框的OnInitDialog()设置成返回False.

#11


只有一条语句也就是return  CPropertyPage::OnApply();  

不能返回此语句,若为空则需要返回FALSE

#12


g

#13


Thank you!!

#1


首先需要子对话框先获取焦点,然后再将焦点转移到Edit控件上。

pChildDialog->SetFocus();
pChildDialog->GetDlgItem(nIDCtrl)->SetFocus();

#2


在父对话框中设置子对话框焦点
然后设置其控件焦点。。

#3


不行啊,那位大侠知道怎么办?

#4


你没有说清楚:
你是不是想这样?在主对话框上有一个按钮,你点击这个按钮激活并显示你的子对话框,默认焦点在Edit1上,但如果子对话框的Edit1为空,就把焦点转移到Edit2?

#5


呵呵,不好意思,是这样的,子对话框有好几个edit,假设有edit1,edit2,edit3。首先在主对话框中将此隐藏的子对话框show出来,同时在主对话框有一个Apply按钮。点击这个确定按钮调用OnApply,实际上在OnApply里面我去调用的是此子对话框中的一个函数,这个函数的功能如下:假如当前光标已在edit3上,它会顺序判断这三个edit是否为空,若edit1为空,则弹出一个messagebox告诉用户edit1不能为空,并把焦点转移到edit1上,等待用户输入。我在这个函数里直接调用edit1.SetFocus()但不能转移到edit1上。此函数执行完返回后继续执行主对话框OnApply中的后面的语句,只有一条语句也就是return  CPropertyPage::OnApply();这条语句该不会又更改焦点把?是不是因为SetFocus()返回的是一个局部变量,当此函数结束返回主对话框时焦点就变成随机的了??如果是该怎么办呢?如果在主对话框中设置此子对话框中edit1的焦点的话,那也破坏了它的封装性啊,而且不单单是一个子对话框,这样做也很麻烦。各位大哥救救我啊!谢谢。

#6


有人知道么?

#7


你可以试试直接在父窗口中设置edit焦点是否起作用

#8


不行啊

#9


简单的方法是你贴一段代码出来,你的那个OnApply()

#10


将对话框的OnInitDialog()设置成返回False.

#11


只有一条语句也就是return  CPropertyPage::OnApply();  

不能返回此语句,若为空则需要返回FALSE

#12


g

#13


Thank you!!