首页 > 解决方案 > c#动态创建system.windows.forms.label

问题描述

我有点吃醋了。通常我是一名 PHP 开发人员,但对于这个角色,我是一名 C# 开发人员。伊皮。

我接手的项目里面有一个很大的不足,就是不具备可扩展性。所有内容都在内部进行了硬编码,并且适用于一个特定项目。C# 对我来说是新的,我不知道去哪里找。

当前的代码状态是这样的:

SomePage.Designer.cs:

private System.Windows.Forms.Label CompLbl1;
private System.Windows.Forms.Label CompLbl2;
private System.Windows.Forms.Label CompLbl3;
...
private System.Windows.Forms.Label CompLbl14;
private System.Windows.Forms.Label CompLbl15;
private System.Windows.Forms.CheckBox CompChkBx1;
private System.Windows.Forms.CheckBox CompChkBx2;
private System.Windows.Forms.CheckBox CompChkBx3;
...
private System.Windows.Forms.CheckBox CompChkBx14;
private System.Windows.Forms.CheckBox CompChkBx15;
private System.Windows.Forms.TextBox CompScanBox1;
private System.Windows.Forms.TextBox CompScanBox2;
private System.Windows.Forms.TextBox CompScanBox3;
...
private System.Windows.Forms.TextBox CompScanBox14;
private System.Windows.Forms.TextBox CompScanBox15;

一些页面.cs

private void CompChkBx1_CheckedChanged(object sender, EventArgs e)
    {
        if (Rwk1 == true)
        {
            Rwk1 = false;
            CompScanBox1.Visible = false;
        }
        else
        {
            Rwk1 = true;
            CompScanBox1.Visible = true;
        }

        // Console.WriteLine("Rework = " + Rwk1.ToString());
}
... all the way
private void CompChkBx15_CheckedChanged(object sender, EventArgs e){}

以上所有内容都是硬编码的。

这在大规模实施时会中断,比如 20 个组件。有没有办法让它更有活力?我很欣赏正确方向的观点

标签: c#

解决方案


WindowsForms 窗体使用部分类。你在一个部分工作。设计师在另一个。你们俩写的东西是在编译过程中结合起来的。当你调用InitializeComponents();构造函数时,设计者写的内容就会被执行。

虽然您不应该在设计器部分进行编辑(如果这样做,它往往会卡住),但您可以全面了解事情是如何完成的。它只能做你能做的事情。从技术上讲,所有UI 元素都是在运行时动态创建的,因此这里没有什么特别需要考虑的。

您最早应该在 Shown() 事件中进行任何工作,例如用值填充 UI。早期可能会导致元素尚未完全存在或长时间运行的操作破坏表单的显示。诸如创建可以在构造函数中执行的元素之类的东西。只是不要忘记将其保存在列表或其他集合中。

当然,另一个问题当然是您基本上从 Web(页面)跨界到桌面编程。至少 PHP 表示 Web Programming。Web 编程使用与桌面编程完全不同的设计模式和程序流程。话虽这么说:虽然 MVC 模式实际上是当今动态网页的同义词,但它开始了桌面编程的生命。


推荐阅读