rmajly 发表于 2024-2-12 23:11:24

子窗体随意显示及隐藏父窗体

本帖最后由 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;

admin 发表于 2024-2-16 09:20:23

谢谢,分享

白白看aar 发表于 2024-2-16 11:26:39

谢谢,分享

jelin 发表于 2024-2-17 16:45:21

感谢分享!

旧事阑珊 发表于 2024-2-23 08:03:03

谢谢分享!

rmajly 发表于 2024-2-25 18:45:00

本帖最后由 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;




rmajly 发表于 2024-2-25 18:47:06

//子窗口代码
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;

rmajly 发表于 2024-2-25 18:54:16

当然,有人想把父、子窗体代码写在一起,这样玩也行。下面的代码是我练手用的,简单粗暴,但有用。

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();

善小而为_ 发表于 2024-3-2 10:10:46

//父子窗口两种模式
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();

蓝度 发表于 2024-9-20 17:03:16

感谢分享,收获满满
页: [1]
查看完整版本: 子窗体随意显示及隐藏父窗体