Используйте JavaScript, чтобы отключить кнопку, как только она нажата.
onclick="this.disabled=true;forms[0].submit();"
Если вы используете VB9 (VS2008), я не думаю , что вы сможете легко использовать анонимную функцию - насколько мне известно, анонимные функции в VB9 имеют , чтобы быть реальными функциями (т.е. они должны возвращать значение), тогда как Action
ничего не возвращает. Анонимные методы C # 2 и лямбда-выражения C # 3 являются более общими, поэтому вы увидите множество примеров, использующих List
из C #, и очень мало примеров, использующих VB: (
Вы могли потенциально написать оболочку MakeAction
, которая принимает Function
и возвращает Action
, но я подозреваю, что другие ограничения на анонимные функции VB9 сделают это непрактичным.
Хорошей новостью является то, что VB10 имеет гораздо больше поддержки анонимных функций . (C # 4 и VB10 приобретают возможности друг друга - я считаю, что MS отныне пытается добиться языкового паритета в большей степени, чем раньше.)
А пока используйте List
вам необходимо написать соответствующий Sub
и использовать AddressOf
, чтобы создать из него делегата. Вот небольшой пример:
Imports System
Imports System.Collections.Generic
Public Class Test
Shared Sub Main()
Dim names as New List(Of String)
names.Add("Jon")
names.Add("Holly")
names.ForEach(AddressOf PrintMe)
End Sub
Shared Sub PrintMe(ByVal text as String)
Console.WriteLine(text)
End Sub
End Class
Предполагая, что VB не поддерживает лямбда-выражения, вы можете создать экземпляр делегата Action (of T) в VB, используя следующий синтаксис:
new Action(Of T)(AddressOf Widget.Save)
Приведенное ниже должно работать, хотя я не в курсе VB.Net, поэтому вам может потребоваться соответствующая настройка.
widgetList.ForEach(w => w.Save())
ну, сейчас я действительно устарел... :-) но в VB это:
widgetList.ForEach(Sub(w) w.Save())
или, более сложно:
widgetList.ForEach(New Action(Of Widged)(Sub(w As Widged) w.Save()))