vb.net窗体操作技巧两则
2003-03-18· ·刘红军 刘乐坤 ··yesky
一、如何拖动没有边框的窗体?
这个功能在vb6中,需要借助于api函数才能实现。而在vb.net中,凭自己的功能就能实现。首先设置窗体的formborderstyle属性为none以去掉窗体的边框,然后在窗体上添加一个按钮。窗体中的代码如下:
public class form1
inherits system.windows.forms.form
private mouse_offset as point
private sub form1_mousedown(byval sender as object, byval e as system.windows.forms.mouseeventargs) handles mybase.mousedown
mouse_offset = new point(e.x, e.y)
end sub
private sub form1_mousemove(byval sender as system.object, byval e as system.windows.forms.mouseeventargs) handles mybase.mousemove
按住鼠标左右键均可拖动窗体
if e.button = mousebuttons.left or e.button = mousebuttons.right then
dim mousepos as point = sender.findform().mouseposition
获得鼠标偏移量
mousepos.offset(-mouse_offset.x, -mouse_offset.y)
设置窗体随鼠标一起移动
sender.findform().location = mousepos
end if
end sub
private sub btnexit_click(byval sender as system.object, byval e as system.eventargs) handles button1.click
关闭窗体
me.close()
end sub
end class
二、多个窗体之间互相调用
在vb6中,多个窗体之间可以很方便地互相调用,如:在form1中,只需要用一条“form2.show” 语句就能显示窗体form2。然而在vb.net中窗体处理机制发生了很大的变化:在访问窗体之前,你必须进行窗体实例化;如果在项目中有多处代码访问同一窗体,则你必须把它的同一实例指针传递给这些代码,否则新创建的窗体实例就不再是原先的窗体了。
下面的代码实现窗体form1和form2之间互相调用,form1为主窗体。form1上的按钮btnshowfrm2的标题为“显示form2”,form2上的按钮btnshowfrm1的标题为“显示form1”。
1、form1中的代码:
public class form1
inherits system.windows.forms.form
创建form2的一个新的实例
dim frm2 as new form2()
public function instance2(byval frm as form2)
frm2 = frm
end function
private sub btnshowfrm2_click(byval sender as system.object, byval e as system.eventargs) handles btnshowfrm2.click
以下语句保证在form2以及其他窗体中访问form1时,
都将得到form1的同一个窗体实例。
frm2.instance(me)
frm2.show()
me.hide()
end sub
end class
2、form2中的代码:
public class form2
inherits system.windows.forms.form
dim frm1 as form1
借助一个新增的instance属性来生成窗体frm1的实例
public function instance(byval frm as form1)
frm1 = frm
end function
private sub btnshowfrm1_click(byval sender as system.object, byval e as system.eventargs) handles btnshowfrm1.click
me.hide()
frm1.show()
end sub
private sub form2_closed(byval sender as object, byval e as system.eventargs) handles mybase.closed
如果form2被关闭,则设置form1的按钮btnshowfrm2不可用。
frm1.btnshowfrm2.enabled = false
frm1.show()
end sub
end class
以上代码全部在windows xp,vb.net下调试通过
