【问题标题】:Wiring Controls in Visual Basic, Controlling the Controls在 Visual Basic 中连接控件,控制控件
【发布时间】:2012-01-31 18:31:03
【问题描述】:

我正在使用 Visual Basic (Visual Studio 2010) 创建动态创建的控件。基本上我正在做的是创建一个标签、一个文本框、一个标签(将充当秒表)和一个按钮(用于控制所述秒表)。

每组控件都将像这样排列(和命名):

[标签] [文本框] [定时器] [按钮] Labelx ParticipantNamex RingTimerx ControlButtonx

所以对于给定的行,我将如下所示:

[标签] [文本框] [定时器] [按钮] Label1 ParticipantName1 RingTimer1 ControlButton1

我已经了解了如何动态创建元素以及在面板中创建它们,在我创建的表单的名称末尾附加了一个特定的数字。我想做的是为动态创建的按钮连接一个事件,以控制通过同一事件创建的秒表计时器。

简而言之,我在问你如何连接一个事件来控制一个特别动态的按钮?

【问题讨论】:

    标签: vb.net visual-studio-2010 stopwatch dynamically-generated


    【解决方案1】:

    使用匿名子(仅限 VB2010)内联编写事件处理程序

    Timer myTimer = New Timer
    Button button = New Button
    AddHandler button.Click,
        Sub(s As Object, e As EventArgs)
             ' can manipulate the Timer here 
             ' because it is captured in a closure     
             myTimer.Stop    
        End Sub
    

    改编自here

    PS 从我们自己的 Jared 那里读到 more about closures

    【讨论】:

    • 谢谢马克。那么我有一个问题,使用这段代码,我是否必须为每个动态创建的对象命名?
    • 不,我不这么认为。默认名称是一个空字符串。据我所知,如果您打算稍后使用名称,则只需为控件命名,也许可以通过它们的名称来distinguish 不同的控件。 (恕我直言,通常有更好的方法)。 See docs for more
    • 我发现了一个小问题...假设我动态创建了两组按钮和标签,使用这种方法只更新标签并且两个按钮控制同一个计时器。 (因此为什么我还没有得到赞成票。)有什么建议吗?
    • 你是capturing a variable defined outside a loop吗?解决方案在链接中。而是在循环内声明一个变量。
    • 不,我指的是在循环内创建的标签。我的问题是我似乎无法引用刚刚创建的控件,也无法引用动态创建的属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2011-05-27
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多