1

これは簡単な解決策があるはずの問題の1つですが、それが何であるかを理解することはできません。

最初のサブが実際に2番目のサブを呼び出さない場合、どうすれば1つのサブから別のサブにコントロールを渡すことができますか?たとえば、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

私はそれがばかげた例であることを知っています-私がこれを作りたい実際のアプリケーションが実際に理にかなっていると私が言うとき、私を信じてください!しかし、ポイントは、2番目のサブが実行されたときに最初のサブによって更新されるコントロールの名前をなんとかして保存したいということです。

最初のサブを2番目から呼び出す場合は簡単ですが、引数として渡すだけですが、そうではありません。最初のサブはボタンクリックから呼び出され、2番目のサブの実行から独立したアクションです。

コントロール名を文字列として保存し、最初のサブが実行されたときに実際のコントロールに変換する方法が見つからないため、セッション変数を使用できないようです(私の最初の考え)。誰かがそれを行う方法を教えてくれれば、それが最も簡単な答えでしょう。

4

1 に答える 1

1

1つのアプローチは、コントロールのIDを文字列としてSession変数に格納し、そのFindControlメソッドを使用して2ndClickイベントでコントロールを取得することです。

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


もう1つの方法は、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 に答える