using CycleGUI; namespace StandardScene.CarTypes { /// /// 长文本只读查看面板(CycleGUI 版,替代原 WinForms TextViewer 窗体)。 /// 保留可实例化 + 以兼容 new TextViewer().Show() 调用。 /// public class TextViewer { private Panel _panel; private volatile string _text = ""; /// 打开(或置前)文本查看面板。 public void Show() => Open(); /// 打开(或置前)文本查看面板。 public void Open() { if (_panel != null) { try { _panel.BringToFront(); return; } catch { _panel = null; } } var panel = GUI.DeclarePanel() .ShowTitle("TextViewer") .SetDefaultDocking(Panel.Docking.None) .InitSize(800, 600) .InitPos(false, 0, 0, 0.5f, 0.5f, 0.5f, 0.5f); _panel = panel; panel.IfTerminalQuit(() => { if (_panel == panel) _panel = null; }); panel.Define(pb => { if (pb.Closing()) { panel.Exit(); if (_panel == panel) _panel = null; return; } pb.SelectableText(null, _text ?? "", copyButton: true); pb.Panel.Repaint(repaintTimeMs: 200); }); } /// 更新显示文本并触发面板重绘(可从非渲染线程调用)。 public void UpdateText(string str) { _text = str ?? ""; _panel?.Repaint(); } } }