子窗体随意显示及隐藏父窗体
本帖最后由 rmajly 于 2024-2-25 18:58 编辑父窗体想把子窗体显示或隐藏起来很容易,但是反过来可能稍复杂些。注意子窗体放到工程的res文件夹下,另外工程的资源文件的属性中内嵌资源选true
父窗体代码:
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; right=349;text="winform.parent";bottom=249 )
winform.add(
btnShowChild={ bottom=191;text="显示子窗口";left=167;top=164;z=1;right=289;cls="button" }
)
/*}}*/
winform.btnShowChild.oncommand = function(id,event){
var child,wb = winform.loadForm("\res\child.aardio",winform /*指定父窗口*/ );
child.btnHide.oncommand = function(id,event){
winform.show(false);
child.btnShow.disabled = false;
}
child.btnShow.oncommand = function(id,event){
winform.show(true);
child.btnShow.disabled = true;
}
child.doModal();
}
winform.show()
win.loopMessage();
return winform;
下面是子窗体代码:
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; exmode="none";min=false;bottom=112;max=false;right=162;border="thin";text="winform.child" )
winform.add(
btnShow={ disabled=1;bottom=41;right=131;left=36;top=20;z=1;text="显示父窗口";cls="button" };
btnHide={ bottom=80;text="隐藏父窗口";left=37;top=59;z=2;right=132;cls="button" }
)
/*}}*/
winform.show()
win.loopMessage();
return winform;
谢谢,分享 谢谢,分享 感谢分享! 谢谢分享! 本帖最后由 rmajly 于 2024-2-25 18:56 编辑
我们的程序在使用过程中,还是会感觉不爽:
不爽之一:子窗体上有两个按钮:“显示父窗口”、“隐藏父窗口”,搞一个按钮不行吗?
改之:软件打开,父窗口显示了,子窗口上唯一的按钮上字样是“隐藏父窗口”,点击它,父窗口隐藏了,于是,按钮上字样又自动变成“显示父窗口”,再点击,父窗口又出现了。这样不是很爽吗?
不爽之二:隐藏了父窗口后,子窗口关闭掉了,父窗口在黑暗中高喊:你走了,我呢?对呀,父窗口到哪里去找?
改之:子窗口关闭,父窗口自动显身!这样点击按钮“显示父窗口”及关闭子窗口,都会显示父窗口。
程序就在不断折腾中逐渐完善、完美。
//主窗口代码
import win.ui;
/*DSG{{*/
var winform = win.form(text="winform.parent";right=349;bottom=249;parent=...)
winform.add(
btnShowChild={cls="button";text="显示子窗口";left=167;top=164;right=289;bottom=191;z=1}
)
/*}}*/
winform.btnShowChild.oncommand = function(id,event){
var frmChild,wb = winform.loadForm("\res\child.aardio",winform /*指定父窗口*/ );
frmChild.btnShow.oncommand = function(id,event){
if(win.isVisible(winform.hwnd)){
winform.show(false);
frmChild.btnShow.text = "显示父窗口";
} else {
winform.show(true);
frmChild.btnShow.text = "隐藏父窗口";
}
}
frmChild.onClose = function(){
winform.show();
frmChild.show(false);
return false;
}
frmChild.doModal();
}
winform.show()
win.loopMessage();
return winform;
//子窗口代码
import win.ui;
import winex
/*DSG{{*/
var frmChild = win.form(text="winform.child";right=162;bottom=112;border="thin";exmode="none";max=false;min=false;parent=...)
frmChild.add(
btnShow={cls="button";text="隐藏父窗口";left=34;top=38;right=129;bottom=59;z=1}
)
/*}}*/
frmChild.show()
win.setTopmost( frmChild.hwnd )//使子窗体一直置顶,显示在最前面
win.loopMessage();
return frmChild;
当然,有人想把父、子窗体代码写在一起,这样玩也行。下面的代码是我练手用的,简单粗暴,但有用。
import win.ui;
/*DSG{{*/
var winform = win.form(text="父";right=448;bottom=281;parent=...)
winform.add(
button1={cls="button";text="button1";left=207;top=103;right=284;bottom=135;z=1}
)
/*}}*/
winform.show()
frmChild = ..win.form( bottom=192;parent=...;text="子";right=344 )
frmChild.add(
button2={ bottom=135;right=284;left=207;top=103;z=1;text="button2";cls="button" }
)
winform.button1.oncommand = function(id,event){
frmChild.show(true)
}
frmChild.button2.oncommand = function(id,event){
winform.show(false)
}
frmChild.onClose = function(){
winform.show();
frmChild.show(false);
return false;
}
win.loopMessage();
//父子窗口两种模式
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/
//父子窗口模式一:界面与业务逻辑混合
var childFormCode = /***
import win.ui;
/*DSG{{*/
var winform = win.form(text="子窗口1";right=759;bottom=469)
winform.add(
button={cls="button";text="Button";left=128;top=226;right=219;bottom=254;z=1}
)
/*}}*/
winform.button.oncommand = function(id,event){
winform.msgbox("子窗口");
}
winform.show()
win.loopMessage();
***/
var child_winform = winform.loadForm(childFormCode,winform /*指定父窗口*/ );
//父子窗口模式二:界面与业务逻辑分离
var childFormCode = /***
import win.ui;
/*DSG{{*/
var winform = win.form(text="子窗口2";right=759;bottom=469)
winform.add(
button={cls="button";text="Button";left=128;top=226;right=219;bottom=254;z=1}
)
/*}}*/
winform.show()
win.loopMessage();
***/
var child_winform = winform.loadForm(childFormCode,winform /*指定父窗口*/ );
child_winform.button.oncommand = function(id,event){
child_winform.msgbox("子窗口");
}
winform.show();
win.loopMessage();
感谢分享,收获满满
页:
[1]