除了 handles 子句,您还可以使用 addhandler 语句实现一个过程处理多个控件的事件。该语句使您可以向任何事件添加事件处理程序,并指定要调用的过程。由于可以向事件添加事件处理程序,您可以使用一系列事件处理程序来处理相同的事件,实际上是在告诉控件应该调用哪个过程来响应事件。因为是委托事件处理程序来处理这一新过程,所以此过程称为“代理”。
要使代理生效,请在窗体的 new 方法中现有代码的 todo 注释下面添加类似下面的代码:
addhandler btndelete.click, addressof buttonclick
addhandler btnnew.click, addressof buttonclick
完成上述代码的添加后,如果单击 new、delete、或 save 按钮,则会调用 buttonclick 事件过程。当然,您可能需要确定调用此特殊事件过程的按钮。要做到这一点,您可以使用传递给所有事件过程的 sender 参数,它是产生该特殊事件的对象。因此您可以编写如下代码:
private sub buttonclick( _
byval sender as object, _
byval e as system.eventargs)
if sender is btnnew then
messagebox.show("已按下 new 按钮")
elseif sender is btnsave then
messagebox.show("已按下 save 按钮")
elseif sender is btndelete then
messagebox.show("已按下 delete 按钮")
end if
end sub
这两种创建数组的方法没有本质区别,您可以任意选择一种。
默认和取消按钮
在旧版本的 visual basic 中,需要将 commandbutton 控件的 default 属性设置为 true,以告诉 visual basic 当按下 enter 键时应该调用此按钮的 click 事件;设置另一个 commandbutton 控件的 cancel 属性,以告诉 visual basic 当按下 esc 键时应该调用此按钮的 click 事件;然后还必须为上述每个 click 事件过程编写代码以关闭窗体,并且很可能需要设置属性,告诉调用此窗体的例程按下的是哪个按钮。
现在,无需为这些按钮编写任何代码即可实现此目的,用户只需将每个按钮的 dialogresult 属性设置为特定的值。例如,如果窗体上包含“确定”和“取消”按钮,请将这两个按钮的 dialogresult 属性分别设置为 ok 和 cancel。然后将窗体的 acceptbutton 属性设置为“确定”按钮,将窗体的 cancelbutton 属性设置为“取消”按钮。
完成这些属性的设置后,便可以使用 showdialog 方法显示窗体,而且两个按钮都可以自动关闭窗体。然后,窗体的 dialogresult 属性会被设置为在按下的按钮中设置的 dialogresult 值。这样,就可以从调用程序内部确定关闭窗体的按钮。
上下文相关菜单
在 windows 应用程序中,您可能需要为控件指定特殊菜单,以在使用鼠标右键单击该控件时显示该菜单。要在 visual basic 6.0 中实现这一功能,您需要将已创建的菜单的 visible 属性设置为 false,然后在该控件的 click 事件过程中编写代码,以显示隐藏的菜单。
在 .net 中,您可以使用 contextmenu 属性创建与窗体的 mainmenu 完全分开的菜单。您只需设置控件的 contextmenu 属性,就可以将此菜单指定给该控件,而不必另外编写任何代码。
在窗体上锁定控件
创建用户界面后,您需要确保在单击控件添加代码时不会意外地移动控件。visual basic 6.0 中有一个选项可以锁定窗体上的所有控件。该选项非常好用,但有时仍需要在大型窗体上处理一小部分内容,这时候就会产生问题。为了处理这一小部分内容,您必须取消所有控件的锁定,这样就有可能不小心移动控件。
在 .net 中,可以将控件分组锁定或单独锁定,这在大型窗体上处理多组控件时非常有用。
mdi 窗体上的控件
在 visual basic 6.0 中,只有那些具有 align 属性的控件才能放置到 mdi 窗体上;而在 .net 中,您可以将任何控件放置到 mdi 窗体上。
dde 已被删除
在 .net 语言中,动态数据交换 (dde) 技术已不再可用。在 .net 中,程序之间的通讯方法很多,不再需要此技术,因此,所有控件中具有 link 前缀的所有属性均已被删除。
标准控件的变化
本文前面提到过,很多标准控件的属性都发生了变化。下面是已改变的属性或已添加到每个不同标准控件中的属性。下表列出的区别仅限于这些控件的特定属性,前面提到过的公共属性也有变化,在此不再赘述。
标签控件
| 新属性 | 说明 |
|---|---|
| text | 此属性在 visual basic 6.0 中称为 caption。 |
文本框控件
| 新属性 | 说明 |
|---|---|
| acceptsreturn | 如果设置为 true,则多行文本框会将 crlf 当作有效字符。要禁止在文本框中输入 crlf,请将此属性设置为 false。 |
| acceptstab | 如果设置为 true,则多行文本框会将制表符当作有效字符。要禁止在文本框中输入制表符,请将此属性设置为 false。 |
| charactercasing | 控制用户在此控件中键入的字母的大小写。选项包括 normal、uppercase 和 lowercase。 |
| readonly | 如果要禁止用户在此文本框中输入文本,请将此属性设置为 true。此属性与原来的 locked 属性功能相同。 |
| textalign | 当用户在文本区域键入数据时,此属性控制文本的对齐方式。可将此属性设置为 left、right 或 center。 |
按钮控件
| 新属性 | 说明 |
|---|---|
| backgroundimage | 允许在按钮上设置背景图像,还可以在图像上添加文本。 |
| dialogresult | 当将窗体作为对话框调用时,设置返回结果。如果用户按下此按钮,将返回此属性中的值。 |
| flatstyle | 改变按钮的外观。选项包括 flat、popup、standard 和 system。如果使用 windows xp,则应该选择 system,因为此选项允许您使用 xp 主题。 |
| image | 在此按钮中显示的图像。 |
| imagealign | 按钮中图像的放置位置。 |
| imageindex | imagelist 控件(在 imagelist 属性中设置)中图像的索引号。 |
| imagelist | imagelist 控件的名称,在此控件中使用 imageindex 属性检索图像。 |
| text | 此属性在 visual basic 6.0 中称为 caption。 |
| textalign | 控制按钮上显示的文本的对齐方式。选项包括 left、right、center、middle、top 或 bottom,或任何上述选项的组合。 |
复选框控件
| 新属性 | 说明 |
|---|---|
| autocheck | 如果设置为 true,则单击控件的任意位置,其状态都会从选中变为取消选中。 |
| backgroundimage | 允许在复选框控件上设置背景图像,还可以在图像上添加文本。 |
| checkalign | 确定复选框控件的位置。visual basic 6.0 将文本的位置限制在复选框内的左侧或右侧。现在,您可以选择 left、right、up、down 或 center。 |
| checked | true=选中,false=取消选中。 |
| checkstate | 此属性允许用户在设计时设置三种状态,以指明在运行时希望该控件显示的内容。可以选择 checked、unchecked 或 indeterminate。注意:只有在将 threestate 属性设置为 true 时,才能设置 indeterminate 选项。 |
| flatstyle | 改变复选框控件的外观。选项包括 flat、popup、standard 和 system。 |
| image | 在复选框中显示的图像。 |
| imagealign | 复选框中图像的放置位置。 |
| imageindex | imagelist 控件(在 imagelist 属性中设置)中图像的索引号。 |
| imagelist | imagelist 控件的名称,在此控件中使用 imageindex 属性检索图像。 |
| text | 此属性在 visual basic 6.0 中称为 caption。 |
| threestate | 如果此属性设置为 true,则可以将 checkstate 属性设置为 indeterminate,同时它还允许用户在 checked、unchecked 和 indeterminate 三种状态间切换。 |