从 Windows Form1 访问 printQueue 类

Posted

技术标签:

【中文标题】从 Windows Form1 访问 printQueue 类【英文标题】:Accessing printQueue class from Windows Form1 【发布时间】:2019-07-20 01:43:21 【问题描述】:

我有一个对象数组将是 int 和 string,我想将它输出到表单中的列表框中。对象数组在另一个类Item中

是否可以像这样让 Form1 在 Class Item 中识别出来

或者我必须将结果发送回form1并将其输入到那里的列表框中?

类项目

 public void printPQ()
    
        for (int i = 0; i < numItems; i++)
        
            //contents += (items.elements[i] == null ? null : items.elements[i].name) + "\n"; 
            lblShowPatient.Text = (items.elements[i].priority + items.elements[i].name);
        
    

【问题讨论】:

【参考方案1】:

您可以将您的 Form1 作为构造函数传递给您的 class(因为我没有看到名称,所以我们将其称为 ClassA),这样您就有了一个具有以下签名的构造函数:

public Form1 Form1 get;set;

public ClassA(Form1 form1)

    Form1 = form1;

然后,当从Form1 初始化你的ClassA 实例时,你会这样称呼它:

ClassA classA = new ClassA(this); //Where this is the current instance of Form1

这将允许您从您的类中访问Form1 实例的元素。

但是,这与您真正想要的编写方式似乎有些颠倒。我建议将ClassAprintPQ 重构为ExportPQ 并返回List&lt;string&gt;。然后在调用该方法的Form1 逻辑中,遍历从ClassA.ExportPQ 返回的内容并填写ListBox。这使您的ClassA 更加有用,因为您现在有一种方法可以在大量 UI 控件中返回此信息,而不仅仅是 Form1 上的特定 ListBox

【讨论】:

那行得通,我可以在 Form1 中访问 ClassA,但我想以相反的方式访问 ClassA 中的 Form1 所有写在“但是”之前的内容都可以让您访问ClassA 中的Form1。您目前如何从 Form1 实例化 ClassA 并调用 printPQ()

以上是关于从 Windows Form1 访问 printQueue 类的主要内容,如果未能解决你的问题,请参考以下文章

从模块访问公共变体数组

如何从另一个类访问 Winform 文本框控件?

c#如何从另一个窗口中更改主窗口控件的属性

C#中两个form窗体之间如何访问相互属性控件,如下:

C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它

C#中2个form如何互传值以及访问方法问题