ユーザーコントロールページにいくつかのボタンがあります。btnA、B、C、D、Eに戻るボタンがあり、ユーザーがボタンAをクリックし、次にユーザーがBをクリックし、次にユーザーが[戻る]ボタンをクリックすると、ページは次の場所に移動します。ボタンA.どうすればこれを達成できますか?
基本的に、Windowsアプリケーションのバック機能のようにブラウザを使用したくないですか?
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の子フォーム階層に従って、必要なことを正確に実行できるようになります。
あなたはこのようにそれを解決するかもしれません:
すべて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
ます(デカップリングを追加するため)。