-2

ユーザーコントロールページにいくつかのボタンがあります。btnA、B、C、D、Eに戻るボタンがあり、ユーザーがボタンAをクリックし、次にユーザーがBをクリックし、次にユーザーが[戻る]ボタンをクリックすると、ページは次の場所に移動します。ボタンA.どうすればこれを達成できますか?

基本的に、Windowsアプリケーションのバック機能のようにブラウザを使用したくないですか?

4

2 に答える 2

0

MDIフォームをお持ちの場合は、次のメソッドを実装できます...

Private Sub cmdBack_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdBack.Click
        Try
            Dim PrevForm As Form = Nothing
            For Each ChildForm As Form In Me.MdiChildren
                If ChildForm.Equals(Me.ActiveMdiChild) Then
                    If Not IsNothing(PrevForm) Then
                        Me.ActivateMdiChild(PrevForm)
                        PrevForm.Focus()
                        Exit For
                    End If
                End If
                PrevForm = ChildForm
            Next
            PrevForm = Nothing
        Catch ex As Exception

        End Try
    End Sub

Private Sub cmdForward_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdForward.Click
    Try
        Dim NextForm As Form = Nothing
        For Each ChildForm As Form In Me.MdiChildren.Reverse
            If ChildForm.Equals(Me.ActiveMdiChild) Then
                If Not IsNothing(NextForm) Then
                    Me.ActivateMdiChild(NextForm)
                    NextForm.Focus()
                    Exit For
                End If
            End If
            NextForm = ChildForm
        Next
        NextForm = Nothing
    Catch ex As Exception

    End Try
End Sub

同じことを行うには...これにより、MDIの子フォーム階層に従って、必要なことを正確に実行できるようになります。

于 2012-09-10T08:03:08.543 に答える
0

あなたはこのようにそれを解決するかもしれません:

すべてClickのハンドラーを、終了直前にTag「戻る」ボタンの内側に配置する別個のメソッド(ラムダなし)にする必要があります。その後Invoke、必要に応じてそれを行うことができます。

疑似コード化された例(概念実証にすぎません!)

void ButtonA_Click(object sender, EventArgs e) 
{
    // Action A
    BackButton.Tag = ButtonAClicked;
}

void ButtonB_Click(object sender, EventArgs e) 
{
    // Action B
    BackButton.Tag = ButtonBClicked;
}

void BackButton_Click(object sender, EventArgs e)
{
    if (((Button)sender).Tag !=null
        this.Invoke(ButtonB.Tag);
}

を実際に使用する必要はありません。オブジェクト.Tagに保存することもできdelegateます(デカップリングを追加するため)。

于 2012-09-10T07:59:26.587 に答える