0

我正在开发一个小文件浏览器,我如何设置后退按钮。

我有:

  • txtAddress.Text这是资源管理器的地址栏。
  • string currAddress其中有当前地址。
  • List<string> prevAddress它应该包含一些以前为返回按钮访问过的地址

    我使用:

  • Root();获取我的电脑项目。
  • Open(string Address);从地址获取文件/文件夹。
  • Search(string Address, string keyword);获取搜索结果项。

    我需要后退按钮,因为当我在路径中搜索时,我无法按下向上按钮(转到父路径),因为我需要返回到我正在搜索的路径,所以后退按钮如何工作探险家?我应该什么时候添加/删除地址?

    在此处输入图像描述

  • 4

    3 回答 3

    3

    建议您自己在应用程序中保持/管理此状态。

    每次用户在地址栏中导航/强制使用新的/不同的路径时,然后将新目录添加到应用程序中的列表/集合中。

    单击后退按钮时,您可以在列表/集合中找到“上一个”条目。那是您要显示的目录。

    Key    Val
      1     D:\
      2     D:\Foo
      3     D:\Foo\Bar
      4     C:\        (here the user may have manually typed into the addr bar)
    

    您可能会遇到目录不再存在、重命名、不可用等问题。也许您已经在代码中处理了这些情况。您可以Directory.Exists在尝试导航之前使用。

    于 2012-04-18T16:18:22.287 回答
    1

    为了很好地实现后退按钮,我建议使用某种堆栈来维护用户所在的位置。每次执行导航时,push旧位置都会放到堆栈中。当按下后退按钮pop时,堆栈顶部的项目并导航到该位置。如果堆栈为空,则使后退按钮不可用,因为无处可返回。

    于 2012-04-18T16:20:53.830 回答
    1

    后退(和前进)非常接近于经常讨论的撤消(即“设计模式”一书中提到的)。

    常见实现 - 存储在“当前状态”和 2 个堆栈中的每个操作的状态(由 @p.campbell 回答):一个用于撤消/返回,另一个用于重做/转发。每当用户进行更改(即通过键入某些内容或主动导航某处)时,重做/转发堆栈被清除,并且先前的状态被推送到撤消/返回堆栈。后退/前进相应地将当前状态放入其中一个堆栈并从另一个堆栈中弹出下一个状态。

    于 2012-04-18T16:51:11.820 回答