首页 > 解决方案 > 如何以编程方式添加面板并进行编辑?

问题描述

所以我有一个面板,它从 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);

但是我遇到的另一个问题是我无法在表单类之外执行此功能,我无法将此面板添加到主面板,因为我无法从静态函数访问面板,并且程序正在获取通过另一个类和线程获取信息,我需要以某种方式从另一个线程/类访问此函数。

标签: c#winforms

解决方案


我会尝试这样的事情:

我假设有一个static classwhich 循环定期检查 API 的新值。

为面板所在的表单创建一个接口来实现。

前任:

interface IPanelAPI {
    void Update(SomeValues vals);
}

将属性添加到static class public IPanelAPI PanelAPI { get; set; }

然后将此属性设置为 Form 的一个实例。

Update()在表单的方法中实现更新面板的逻辑。

Update()当新信息到达时从循环内调用。

注意:查看Invoke()以从非 UI 线程更新 UI。


推荐阅读