我正在开发一个小文件浏览器,如何设置返回按钮。
我有:txtAddress.Text
这是资源管理器的地址栏。
string currAddress
,其中包含当前地址。
List<string> prevAddress
应该包含之前访问过后退按钮 的地址
我使用:
Root();
获取“我的电脑”项目。
Open(string Address);
从地址获取文件/文件夹。
Search(string Address, string keyword);
获取搜索结果项。
我需要后退按钮,因为当我在路径中搜索时,我无法按下按钮(转到父路径)因为我需要回到我正在搜索的路径,所以如何返回按钮在资源管理器中工作?什么时候应该添加/删除地址?
答案 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回答指出):一个用于撤销/返回,另一个用于重做/转发。每当用户进行更改(即通过在某处键入某些内容或主动导航)时,将清除重做/转发堆栈,并将先前状态推送到撤消/返回堆栈。后退/前进相应地将当前状态置于其中一个堆栈中,并从另一个堆栈中弹出下一个状态。