【问题标题】:How to impliment Back button Functionality in Windows Application? [closed]如何在 Windows 应用程序中实现后退按钮功能? [关闭]
【发布时间】:2012-09-10 07:50:57
【问题描述】:

我的用户控制页面中有几个按钮,假设我有一个带有后退按钮的 btn A、B、C、D、E,用户单击按钮 A,然后用户单击 B,然后用户单击后退按钮,然后页面应该导航到按钮 A。我怎样才能做到这一点?

基本上我不想在我的 Windows 应用程序中使用类似浏览器的返回功能?

【问题讨论】:

  • 很遗憾,这不是代码生成器,请发布代码以显示您尝试过的内容,并在您遇到无法理解的内容时告诉我们,以便我们为您提供帮助,我最诚挚的问候。

标签: c# .net windows


【解决方案1】:

如果你有 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 子表单层次结构执行您想要的操作。

【讨论】:

    【解决方案2】:

    你可以这样解决:

    您必须使每个 Click 处理程序成为一个独特的方法(没有 lambdas),它在结束之前将自己置于“返回”按钮的 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 对象中(以增加解耦)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多