fullwolf 发表于 2011-8-19 17:03:24

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

本帖最后由 fullwolf 于 2011-8-19 17:07 编辑

      最近一直有个问题困扰着我,我用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 发表于 2011-8-20 15:58:21

本帖最后由 xgr 于 2011-8-20 15:59 编辑 <br /><br /><P>我用的是cad2010+vs2008,查看了很多的帖子,至今都还没有找到解决方法,郁闷啊!</P>
<P>下面C#方法还是没用啊<BR>&nbsp;</P>
<DIV class=blockcode>
<BLOCKQUOTE>class&nbsp;win32Api<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;extern&nbsp;System.IntPtr&nbsp;SetFocus(System.IntPtr&nbsp;hwnd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;SetCadFocus()<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetFocus&nbsp; (Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Handle);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.UpdateScreen();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR></BLOCKQUOTE></DIV>
<P><BR>&nbsp;</P>
<P>在按钮的Chick事件调用</P>
<P>&nbsp;win32Api.SetCadFocus();</P>
<P>&nbsp;</P>
<P>不知道到底什么原因。</P>

fullwolf 发表于 2011-8-20 21:28:13

这个真不知道。我用vb的通过了,最好有c的高手来帮帮忙
页: [1]
查看完整版本: 关于如何从paletteset面板点击按钮后使图形区获得焦点