private void InitKeyControl() { var UpFolderAction = new Action <TreeIter>(iter => { if (TreeIter.Zero.Equals(iter)) { return; } TreeIter parent; packStore.IterParent(out parent, iter); RefreshFolderView(parent); currentFolder = parent; Packer.Item item = packStore.GetValue(iter, 0) as Packer.Item; TreeIter selectedInFolder = FindInCurrentFolder(item); packTreeView.SelectAndFocus(selectedInFolder); }); var DownFolderAction = new Action <TreeIter>(iter => { if (TreeIter.Zero.Equals(iter)) { return; } RefreshFolderView(iter); currentFolder = iter; TreeIter selectedInFolder; folderStore.GetIterFirst(out selectedInFolder); packTreeView.SelectAndFocus(selectedInFolder); }); packTreeView.RowActivated += (o, args) => { TreeIter selectedInFolder; folderStore.GetIter(out selectedInFolder, args.Path); Packer.Item item = folderStore.GetValue(selectedInFolder, 2) as Packer.Item; if (!item.IsFolder) { return; } if (item.IsRoot) { UpFolderAction(currentFolder); } else { DownFolderAction(FindInPack(item)); } }; packTreeView.AddEvents((int)(Gdk.EventMask.KeyPressMask)); packTreeView.KeyReleaseEvent += (o, args) => { if (args.Event.Key == Gdk.Key.BackSpace) { UpFolderAction(currentFolder); } if (args.Event.Key == Gdk.Key.Delete) { RemoveAction.Activate(); } }; }