【问题标题】:How do I add panels programatically and edit them?如何以编程方式添加面板并进行编辑?
【发布时间】:2021-06-17 17:13:22
【问题描述】:

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

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

【问题讨论】:

  • 您可以将它们存储在字典中以便轻松找到。您还可以创建一个自定义控件,其中包含每行所需的控件以非常轻松地处理所有这些,并且可以使用 flowlayoutpanel 将它们放入。

标签: c# winforms


【解决方案1】:

我会尝试这样的:

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

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

例如:

interface IPanelAPI {
    void Update(SomeValues vals);
}

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

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

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

当新信息到达时,在循环内调用Update()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多