public virtual void Loop() { if (this._current == null) return; //菜单的显示与响应 do { this._current.Output(); var cki = Console.ReadKey(); this.Writer.W("\n\n"); var isRightCmd = false; foreach (var m in this._current.SubMenus) { var isVisible = m.DoCheckVisible(); if (isVisible != null && isVisible.Value && m.ShortCutKey.ToString().Equals(cki.Key.ToString(), StringComparison.OrdinalIgnoreCase)) { if (m.SubMenus.Count > 0) this._current = m; isRightCmd = true; m.DoAction(); break; } } if (!isRightCmd) Warning(); } while (this._isDoLoop); }
public MenuItem(Menu owner, MenuItem parent, string caption, string intro, ConsoleKey shortCutKey, Action<MenuItem> action, VisibleChecker visibleChecker) { this._owner = owner; this._parent = parent; this._caption = caption; this._intro = intro; this._shortCutKey = shortCutKey; this.Action = action; this.VisibleChecker = visibleChecker; }
public virtual void Escape() { if (this._current.Parent != null) { this._current = this._current.Parent; } else this._isDoLoop = false; }
/// <summary> /// 获取菜单位于树中的路径 /// </summary> public static string GetLocation(MenuItem cmi) { if (cmi == null) return string.Empty; if (cmi.Parent != null) return MenuItem.GetLocation(cmi.Parent) + "." + cmi.Caption; return cmi.Caption; }
/// <summary> /// 添加“返回上级”菜单 /// </summary> public virtual MenuItem AddEx(string caption) { var cmi = new MenuItem(_owner, this, caption, null, ConsoleKey.Escape, cm => { cm.Owner.Escape(); }, null); this.SubMenus.Add(cmi); return cmi; }
public virtual MenuItem Add(string caption, string intro, ConsoleKey shortCutKey, Action<MenuItem> action, VisibleChecker visibleCheck) { var cmi = new MenuItem(_owner, this, caption, intro, shortCutKey, action, visibleCheck); this.SubMenus.Add(cmi); return cmi; }