using System; using System.Windows.Forms; namespace SymbolLibManager { /// /// 符号管理 /// 要点: /// 1、用户多次点击 -> 不应该弹出多个窗口 /// 2、窗口被最小化、置后 -> 再点时要“恢复 + 激活“ /// 3、窗口被关闭/句柄销毁 -> 静态引用要清理 /// public class SymbolManager : SymbolLibInterface.ISymbolManager { private static FrmMarkMain frmMain; public void ShowSymbolEditor(string symbolPath) { ShowSymbolEditor(null, symbolPath); } public void ShowSymbolEditor(object sender, string symbolPath) { if (frmMain == null) { if (!(sender is GeoSigma.UCDraw.MainView view) || view.ViewControl.Geo == null) { frmMain = new FrmMarkMain(symbolPath); } else { frmMain = new FrmMarkMain(view.ViewControl.Geo, symbolPath); } frmMain.HandleDestroyed += FrmMain_HandleDestroyed; frmMain.Show(); } else { if (frmMain.WindowState == FormWindowState.Minimized) { frmMain.WindowState = FormWindowState.Normal; } frmMain.Activate(); frmMain.BringToFront(); } } private void FrmMain_HandleDestroyed(object sender, EventArgs e) { frmMain = null; } private string selectedSymbolName; public Form CreateSymbolSelectForm(GeoSigmaDrawLib.GeoSigmaXY geo, string symbolPath, Func acceptSymbolName) { FrmSymbolSelect frm = new FrmSymbolSelect(geo, symbolPath, ref selectedSymbolName); frm.FormClosed += (sender, arg) => { acceptSymbolName?.Invoke(frm.SelectedSymbolName); }; return frm; } } }