//20170929 leo: undo redo 用 public void readProgramR8(R8 r8) { //清空畫面 foreach (Button b in buttons) { b.Dispose(); } buttons.Clear(); buttonsLocationY = buttonStartY; //標籤也要清空 foreach (Label l in lineLabels) { l.Dispose(); } lineLabels.Clear(); //20170322 leo: 增加[New File] 模式,清空 variable 後就 return if (r8 == null) { formMain.formVariables.showVariables(null); formMain.formFunction.showFunction(null); R8.clearLogBox(); this.Text = Program_Functions + " " + buttons.Count + " of " + FormMain.r8.getFunctionsCount(); return; } Function function = null; List <Function> functionList = new List <Function>(); //改為 sort 完依 posY 排序再放 button for (int i = 0; i < r8.getFunctionSnLast(); i++) { function = r8.functions[i]; if (function == null) { continue; } functionList.Add(function); } functionList.Sort(delegate(Function i1, Function i2) { return(i1.posY.CompareTo(i2.posY)); }); for (int i = 0; i < functionList.Count; i++) { function = functionList.ElementAt(i); addButton(getFunctionShowText(function), function.sn, function.enable); function.posY = buttons.Count;//讀出 button 後,應該要再依實際 button 位置進行 posY排序 } this.Text = Program_Functions + " " + buttons.Count + " of " + FormMain.r8.getFunctionsCount(); formMain.formVariables.showVariables(null); formMain.formFunction.showFunction(null); this.Invalidate(); return; }