1

这是似乎应该有一个简单的解决方案的问题之一,但我无法弄清楚它是什么!

如果第一个 sub 实际上没有调用第二个,我如何将控件从一个 sub 传递到另一个 sub?例如,btnChangeText 位于具有名为 mpExample 的 ModalPopupExtender 的面板中,因此通常不可见:

Protected Sub btnChangeText_Click(sender as object, e as EventArgs) Handles btnChangeText.Click

<SpecifiedTextBox>.Text = "Hello"

End Sub

然后在主页上,始终可见,是一个与每个文本框相关联的按钮。在此示例中,它是 textbox15:

Protected Sub btnChangeTextBox15_Click(sender as object, e as EventArgs) Handles btnChangeTextBox15.Click

<Set TextBox15 as variable>
mpExample.Show()

End Sub

我知道这是一个愚蠢的例子 - 当我说我想要做的真正应用实际上是有道理的时候相信我!但关键是我想以某种方式存储控件的名称,以便在第二个子运行时由第一个子更新。

如果我从第二个调用第一个子会很容易,我只是将它作为参数传递,但我不是。第一个 sub 是通过单击按钮调用的,并且是第二个 sub 运行的独立动作。

我似乎无法使用会话变量(我的第一个想法),因为我找不到任何方法将控件名称存储为字符串,然后在第一个子运行时将其转换回实际控件。如果有人能告诉我该怎么做,那将是最简单的答案。

4

1 回答 1

1

一种方法是将控件的 ID 作为字符串存储在 Session 变量中,然后使用该FindControl方法在您的 2nd Click 事件中获取控件。

Protected Sub btnChangeTextBox15_Click(sender as object, e as EventArgs) Handles btnChangeTextBox15.Click
    Session("currentTextBox") = TextBox15.ID
    mpExample.Show()
End Sub

Protected Sub btnChangeText_Click(sender as object, e as EventArgs) Handles btnChangeText.Click
    Dim currentTextBox As TextBox
    currentTextBox = CType(Page.FindControl(Session("currentTextBox")),TextBox)
    currentTextBox.Text = "Hello"
End Sub

请注意,如果您的 TextBox15 控件位于某种容器(Panel 或其他东西)内,您将需要使用该容器的FindControl方法,而不是Page.FindControl.


另一种方法是将TextBox自身存储在 Session 变量中,然后将其拉出以在其他方法中设置文本。请注意,这仅适用于在同一个请求中调用这两个方法的情况(这听起来不适用于您的用例)。这就是它的样子:

Protected Sub btnChangeTextBox15_Click(sender as object, e as EventArgs) Handles btnChangeTextBox15.Click
    Session("currentTextBox") = TextBox15
    mpExample.Show()
End Sub

Protected Sub btnChangeText_Click(sender as object, e as EventArgs) Handles btnChangeText.Click
    Dim currentTextBox As TextBox
    currentTextBox = CType(Session("currentTextBox"), TextBox)
    currentTextBox.Text = "Hello"
End Sub
于 2013-03-27T13:07:28.167 回答