乐筑天下

帖子
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 32|回复: 2

关于如何从paletteset面板点击按钮后使图形区获得焦点

[复制链接]

6

主题

14

帖子

1

银币

初来乍到

Rank: 1

铜币
38
发表于 2011-8-19 17:03:00 | 显示全部楼层 |阅读模式
最近一直有个问题困扰着我,我用vb.net新建了一个paletteset面板,添加了自定义控件,其中包含按钮,按钮的点击事件就是获得一个点。但是每次点击按钮都要点两次图形区域才能开始。
        试了好多次,发现第一次点击图形区域是为了获得焦点,第二次才是命令。经查找资料解决了。
1:在按钮事件开始写下代码:
"paletteset.keepfocus=false"
结束时写下:
“paletteset.keepfocus=true”
此方法在2007,2008中调试可用。在2011中无用。其他版本未试过,如无用,可用下一个方法。
2:在2011中,此方法无用,感觉好像2011中的面板比2007的选项多了,估计是焦点绑的太牢了。
只会vb.net,不知在C中如何写以下代码。
在按钮的sub上一行写:
Private Declare Function SetFocus Lib "user32" (ByVal hwnd As System.IntPtr) As System.IntPtr
在按钮的事件中,getpoint之前写(sub的开头写就可以吧,我是在定义了doc后就写了):
SetFocus(Application.DocumentManager.MdiActiveDocument.Window.Handle)
经调试,在2011中有效。希望有人有更好的方法。
回复

使用道具 举报

xgr

56

主题

302

帖子

8

银币

中流砥柱

Rank: 25

铜币
526
发表于 2011-8-20 15:58:00 | 显示全部楼层

我用的是cad2010+vs2008,查看了很多的帖子,至今都还没有找到解决方法,郁闷啊!
下面C#方法还是没用啊

[B]class win32Api
     {
        [DllImport("user32.dll")]
        private static extern System.IntPtr SetFocus(System.IntPtr hwnd);
        public static void SetCadFocus()
         {
             SetFocus  (Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Handle);
             Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.UpdateScreen();
           }
     }
[/B]

在按钮的Chick事件调用
win32Api.SetCadFocus();

不知道到底什么原因。
回复

举报

6

主题

14

帖子

1

银币

初来乍到

Rank: 1

铜币
38
发表于 2011-8-20 21:28:00 | 显示全部楼层
这个真不知道。我用vb的通过了,最好有c的高手来帮帮忙
回复

举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁體中文

GMT+8, 2025-3-16 15:00 , Processed in 0.857485 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表