如何在文件浏览器中编写BACK按钮?

时间:2012-04-18 16:14:21

标签: c# explorer file-manager

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

我有:

  • txtAddress.Text这是资源管理器的地址栏。
  • string currAddress,其中包含当前地址。
  • List<string> prevAddress应该包含之前访问过后退按钮

    的地址

    我使用:

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

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

    enter image description here

  • 3 个答案:

    答案 0 :(得分: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

    答案 1 :(得分:1)

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

    答案 2 :(得分:1)

    后退(和前进)非常接近撤销,这是更常见的讨论(即在"Design Patterns"书中提到)。

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