如何从C#中的类访问窗体方法和控件

本文关键字:窗体 访问 方法 控件 | 更新日期: 2023-09-27 17:47:49

我正在开发一个C#程序,现在我有一个Form和几个类。我希望能够访问类中的一些Form控件(例如TextBox)。当我试图更改课堂上TextBox中的文本时,我会收到以下错误:

非静态字段、方法或属性"Project"需要对象引用。表格1.txtLog'

如何从我的一个类访问Form1.cs中的方法和控件?

如何从C#中的类访问窗体方法和控件

您试图访问类而不是对象。这种说法可能会让初学者感到困惑,但你实际上是在试图通过拿起房屋平面图上的门来打开你的房门。

如果你真的想直接从一个类访问表单组件(你没有),你可以使用实例化表单的变量

根据你想走的路,你最好将控件的文本或任何东西发送到类中的方法,例如

public void DoSomethingWithText(string formText)
{
   // do something text in here
}

或者在表单类上公开属性并在其中设置表单文本,例如

string SomeProperty
{
   get 
   {
      return textBox1.Text;
   }
   set
   {
      textBox1.Text = value;
   }
}

另一个解决方案是将文本框(或要修改的控件)传递到方法中,该方法将其作为参数进行操作。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        TestClass test = new TestClass();
        test.ModifyText(textBox1);
    }
}
public class TestClass
{
    public void ModifyText(TextBox textBox)
    {
        textBox.Text = "New text";
    }
}
  1. 必须具有对表单对象的引用才能访问其元素
  2. 必须将这些元素声明为public,以便其他类访问它们
  3. 不要这样做——你的类必须知道太多关于表单是如何实现的;不要在窗体类之外公开窗体控件
  4. 相反,在表单上创建公共属性以获取/设置感兴趣的值
  5. 发布更多关于你想要什么以及为什么的细节,听起来你可能正朝着与良好封装实践不一致的方向前进

您需要访问对象。。。。你不能简单地问形式课。。。。

例如。。。

你会做一些类似的事情

Form1.txtLog.Text = "blah"

而不是

Form1 blah = new Form1();
blah.txtLog.Text = "hello"

如果表单首先启动,那么在表单加载处理程序中,我们可以实例化类的副本。我们可以拥有引用我们想要引用的任何控件的属性。将对表单"this"的引用传递给该类的构造函数。

public partial class Form1 : Form
{
    public ListView Lv
    {
        get { return lvProcesses; }
    }
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        Utilities ut = new Utilities(this);
    }
}

在类中,表单中的引用被传递到构造函数中,并作为私有成员存储。此表单引用可用于访问表单的属性。

class Utilities
{
    private Form1 _mainForm;
    public Utilities(Form1 mainForm)
    {
        _mainForm = mainForm;
        _mainForm.Lv.Items.Clear();
    }
}

您需要使表单类的中的成员为公共成员,或者如果服务类在同一程序集中,则为内部成员。Windows控件的可见性可以通过其Modifiers属性进行控制。

请注意,将服务类显式地绑定到UI类通常被认为是一种糟糕的做法。相反,您应该在服务类和表单类之间创建良好的接口。也就是说,为了学习或只是四处闲逛,如果你为服务课程公开表单成员,地球就不会自转。

rp

我对c#比较陌生,对stackoverflow也很陌生。无论如何,关于如何从类访问窗体上的控件的问题:我刚刚使用了窗体的ControlCollection(controls)类

        //Add a new form called frmEditData to project.
        //Draw a textbox on it named txtTest; set the text to
        //something in design as a test.
        Form frmED =  new frmEditData();
        MessageBox.Show(frmED.Controls["txtTest"].Text);

为我工作,也许这对两个问题都有帮助。

你可以像这个一样向全班发送表格

Class1 excell = new Class1 (); //you must declare this in form as you want to control
excel.get_data_from_excel(this); // And create instance for class and sen this form to another class

创建CLASS1 时在类内部

class Class1
{
    public void get_data_from_excel (Form1 form) //you getting the form here and you can control as you want
    {
        form.ComboBox1.text = "try it"; //you can chance Form1 UI elements inside the class now
    }
}

重要提示:但您不能忘记,您已经将修饰符表单属性声明为PUBLIC,并且您可以访问其他方面。您不能从类

中看到表单中的控件