搜索
aardio官方社区 门户 查看主题

控件orphanWindow()之后会影响窗口上其他控件的焦点,请问怎样处理?

发布者: daheian | 发布时间: 2018-4-7 20:39| 查看数: 151| 评论数: 2|帖子模式

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="重现窗体";right=479;bottom=480;bgcolor=16777215;parent=...)
  4. winform.add(
  5. editBrand={cls="edit";left=94;top=96;right=219;bottom=118;dl=1;dt=1;edge=1;font=LOGFONT(name='微软雅黑');hidesel=1;tabstop=1;z=4};
  6. editName={cls="edit";left=320;top=41;right=445;bottom=63;dl=1;dt=1;edge=1;font=LOGFONT(name='微软雅黑');hidesel=1;tabstop=1;z=2};
  7. editNum={cls="edit";left=94;top=41;right=219;bottom=63;dl=1;dt=1;edge=1;font=LOGFONT(name='微软雅黑');hidesel=1;tabstop=1;z=1};
  8. editUnit={cls="edit";text="个";left=318;top=75;right=443;bottom=97;dl=1;dt=1;edge=1;font=LOGFONT(name='微软雅黑');hidesel=1;tabstop=1;z=3};
  9. listview2={cls="listview";left=319;top=64;right=587;bottom=163;dl=1;dt=1;edge=1;hide=1;z=9};
  10. static={cls="static";text="配件编号:";left=24;top=45;right=92;bottom=65;align="right";dl=1;dt=1;font=LOGFONT(name='微软雅黑');transparent=1;z=5};
  11. static2={cls="static";text="配件名称:";left=250;top=45;right=318;bottom=65;align="right";dl=1;dt=1;font=LOGFONT(name='微软雅黑');transparent=1;z=6};
  12. static3={cls="static";text="单 位:";left=248;top=78;right=316;bottom=98;align="right";dl=1;dt=1;font=LOGFONT(name='微软雅黑');transparent=1;z=7};
  13. static5={cls="static";text="品 牌:";left=24;top=100;right=92;bottom=120;align="right";dl=1;dt=1;font=LOGFONT(name='微软雅黑');transparent=1;z=8}
  14. )
  15. /*}}*/

  16. winform.listview2.orphanWindow();
  17. winform.listview2.insertColumn("测试标题",150);

  18. winform.listview2.wndproc = function(hwnd,message,wParam,lParam){
  19.         if(message == 0x8/*_WM_KILLFOCUS*/){
  20.                 winform.listview2.hide = true;
  21.         }
  22. }

  23. winform.editName.wndproc = function(hwnd,message,wParam,lParam){
  24.         if(message == 0x7/*_WM_SETFOCUS*/){
  25.                 winform.listview2.hide = false;
  26.         }
  27. }

  28. winform.show()
  29. win.loopMessage();
复制代码


点一次名称后面的edit之后,点一下其他位置,orphanWindow()的控件隐藏,再点名称后面的edit,edit就获取不到焦点,好像被什么盖住了。
光标放在单位后面的edit里,鼠标来回在界面上晃几下。这个edit里光标的位置会自动变换。
请问要怎样处理 ?

最新评论

daheian 发表于 2018-4-7 21:14:18
  1. winform.editName.wndproc = function(hwnd,message,wParam,lParam){
  2.         if(message == 0x7/*_WM_SETFOCUS*/){
  3.                 win.setTimeout(
  4.                         function(){
  5.                                 winform.listview2.hide = false;
  6.                         }
  7.                 )
  8.         }
  9. }
复制代码

得到kio1大神的帮助,已经没有问题了 。
Jacen.He 发表于 2018-4-7 22:51:34
先让 _WM_SETFOCUS 正常执行完,再切换焦点,
也可以在 oncommand 事件弹出listview
import win.ui;
/*DSG{{*/
var winform = win.form(text="重现窗体";right=479;bottom=480;bgcolor=16777215;parent=...)
winform.add(
editBrand={cls=
"edit";left=94;top=96;right=219;bottom=118;dl=1;dt=1;edge=1; hidesel=1;tabstop=1;z=4};
editName={cls=
"edit";left=320;top=41;right=445;bottom=63;dl=1;dt=1;edge=1; hidesel=1;tabstop=1;z=2};
editNum={cls=
"edit";left=94;top=41;right=219;bottom=63;dl=1;dt=1;edge=1; hidesel=1;tabstop=1;z=1};
editUnit={cls=
"edit";text="个";left=318;top=75;right=443;bottom=97;dl=1;dt=1;edge=1; hidesel=1;tabstop=1;z=3};
listview2={cls=
"listview";left=319;top=64;right=587;bottom=163;dl=1;dt=1;edge=1;hide=1;z=9};
static={cls=
"static";text="配件编号:";left=24;top=45;right=92;bottom=65;align="right";dl=1;dt=1; transparent=1;z=5};
static2={cls=
"static";text="配件名称:";left=250;top=45;right=318;bottom=65;align="right";dl=1;dt=1; transparent=1;z=6};
static3={cls=
"static";text="单 位:";left=248;top=78;right=316;bottom=98;align="right";dl=1;dt=1; transparent=1;z=7};
static5={cls=
"static";text="品 牌:";left=24;top=100;right=92;bottom=120;align="right";dl=1;dt=1; transparent=1;z=8}
)
/*}}*/

winform.listview2.orphanWindow();
winform.listview2.insertColumn(
"测试标题",150);

winform.listview2.wndproc =
function(hwnd,message,wParam,lParam){
   
if(message == 0x8/*_WM_KILLFOCUS*/){
        winform.listview2.hide =
true;
    }
}

winform.editName.oncommand =
function(id,event){
   
if( event == 0x100/*_EN_SETFOCUS*/)
        winform.listview2.show(0x4
/*_SW_SHOWNOACTIVATE*/)
   
elseif( event == 0x200/*_EN_KILLFOCUS*/){
        
if( win.getRoot(win.getFocus()) != winform.listview2.hwnd )
            winform.listview2.hide =
true;
    }
}

winform.show();
win.loopMessage();


listview最好弄个custom做容器,不然处理不了事件




手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-4-22 11:03 , Processed in 0.062503 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表