c# - 如何以编程方式添加面板并进行编辑?
问题描述
所以我有一个面板,它从 API 获取信息并显示它,这些信息每秒都在变化,有时某些信息会被删除或替换。目前我有这个:
我找到了一种以编程方式创建面板以及标签的方法,但是我将如何根据获得的信息编辑每个标签。
我有这个代码:
Guna2GradientPanel info = new Guna2GradientPanel();
info.Paint += new PaintEventHandler(this.panel_Paint);
info.Size = new Size(681, 41);
info.Location = new Point(21, 74);
info.FillColor = Color.FromArgb(23, 24, 45);
info.FillColor2 = Color.FromArgb(23, 24, 45);
info.BorderRadius = 5;
info.ShadowDecoration.BorderRadius = 12;
info.ShadowDecoration.Enabled = true;
info.ShadowDecoration.Color = Color.FromArgb(10, 10, 28);
info.ShadowDecoration.Shadow = new Padding(10, 10, 10, 10);
info.ShadowDecoration.Depth = 3;
InfoDisplayPanel.Controls.Add(info);
但是我遇到的另一个问题是我无法在表单类之外执行此功能,我无法将此面板添加到主面板,因为我无法从静态函数访问面板,并且程序正在获取通过另一个类和线程获取信息,我需要以某种方式从另一个线程/类访问此函数。
解决方案
我会尝试这样的事情:
我假设有一个static class
which 循环定期检查 API 的新值。
为面板所在的表单创建一个接口来实现。
前任:
interface IPanelAPI {
void Update(SomeValues vals);
}
将属性添加到static class
public IPanelAPI PanelAPI { get; set; }
然后将此属性设置为 Form 的一个实例。
Update()
在表单的方法中实现更新面板的逻辑。
Update()
当新信息到达时从循环内调用。
注意:查看Invoke()
以从非 UI 线程更新 UI。
推荐阅读
- annotations - 如何使用 Marklogic sc:annotations 方法访问模式元素注释
- scala - 如何使用 SBT 构建运行 Cobertura 代码覆盖率
- sql - Django 多对多关系与通过模型过滤
- reactjs - 警告:函数作为 React 组件中的 React 子项无效
- django - Let's Encrypt 证书的 Nginx + Gunicorn 问题
- c# - 未知的数据库格式?Visual Studio 连接到 MS Access .accdb
- r - RWordPress knit2wp 连接到 site.com:443 的未知 SSL 协议错误
- javascript - 有什么方法/功能可以在 jQuery 中取消点击?
- twitter-bootstrap - bootstrap.sass nuget 中的 SASS 文件在哪里
- java - SQL 错误语法,请查看与您的 MariaDB 服务器版本对应的手册以获取正确的语法使用