C# 从另一个静态类访问表单方法

C# 从另一个静态类访问表单方法,c#,.net,forms,static,C#,.net,Forms,Static,所以,我现在几乎没有线索了,甚至不确定这是否可能。 我有一个Visual C#表单,它由Program.cs运行(标准方式-VS当然完成了所有的设置工作) 除此之外,我在一个单独的C#文件中有一个带有静态方法的类,只是因为我喜欢在一个文件中保留一个类 我的表单代码具有公共功能: public void print(String text) { rtb_log.appendText("\n" + text); } 在某个时间点,我从另一个类调用静态函数 是否有可能从我的另一个类访问pri

所以,我现在几乎没有线索了,甚至不确定这是否可能。 我有一个Visual C#表单,它由Program.cs运行(标准方式-VS当然完成了所有的设置工作)

除此之外,我在一个单独的C#文件中有一个带有静态方法的类,只是因为我喜欢在一个文件中保留一个类

我的表单代码具有公共功能:

public void print(String text)
{
    rtb_log.appendText("\n" + text);
}
在某个时间点,我从另一个类调用静态函数

是否有可能从我的另一个类访问print方法?因为它引用的是rtb_日志(一个富文本框),所以它只有在实例化时才可用,当然不是静态的。但是由于静态方法只能访问静态成员,所以我对如何从另一个类在表单上附加一些文本有点不太了解

有人帮忙吗

但是由于静态方法只能访问静态成员,所以我对如何从另一个类在表单上附加一些文本有点不太了解

静态成员可以访问实例成员-他们只需要知道在哪个实例上调用该方法。所以你可以写:

public static void Foo(OtherForm myOtherForm)
{
    // Do some stuff...
    myOtherForm.Print(); // Case changed to comply with naming conventions
}
然后,当调用该方法时,需要提供对相关表单的引用。基本上,必须确定要调用哪个实例
Print
。找出谁掌握了这些信息,然后从那里传下去。我建议不要使用静态变量来保存此信息。(全局状态降低了代码的可重用性,更难推理,也更难测试。)

编辑:给出这些评论,听起来你想要:

// Within the form
private void HandleClick(object sender, EventArgs e)
{
    SomeClass.StaticMethod(this);
}
见下文

class SomeMainClass
{
    private ClassB form = null;

    private void SomeMethod()
    {
        form = new ClassB();
        form.Show();
        ClassA foo = new ClassA(this);
    }

    // Use an accessor.
    public ClassB Form
    {
        get { return this.form; }
    }
}

class ClassA
{
    private SomeMainClass mainClass = null;

    // Constructor.
    public ClassA(SomeMainClass _mainClass)
    {
        this.mainClass = _mainClass;
    }

    private void SomeMethod()
    {
        this.mainClass.Form.Print("Something to print");
    }
}

class ClassB : Form
{
    // Constructor.
    public ClassB()
    {
        InitializeComponent();
    }

    public void Print(String text) 
    {     
        rtb_log.appendText("\n" + text); 
    } 
}   
编辑:这是回应您评论的基本方法。就资源而言,它不是那么有效,但它能满足您的需求


我希望这会有所帮助。

当然,但是如何访问主窗体的实例呢?我想这是我真的不太清楚的问题。有什么方法可以访问该实例吗?它是在Program.cs的main方法中使用standart(newform1())创建的;另外,感谢您指出我的命名转换错误并严肃对待我的初学者问题:)@Klausklapper:如果
程序
正在创建一个
新表单1()
,那么此时您就有了对它的引用。。。但是什么叫静态方法呢?换一种说法:如果有东西创建了表单的多个实例,你怎么会希望知道哪个实例可以调用
Print
方法呢?我很愚蠢,当然你是对的。对不起,我瞎了眼。多谢各位![在一分钟内正确地标记你的答案,因为它不会让我更快>:C]@Klausklapper:啊,那么它就在点击按钮的范围内了?如果是这样的话,只要传入
这个
,假设您希望它返回到相同的表单。再次,非常感谢您在这么快的时间内帮助我解决了这样一个新话题!可悲的是,事实并非如此。你看,我的表单(在你的例子中是ClassB)在Program.cs的Main方法中得到了实例,基本上与每个简单的VC#GUI一样。我没有直接的实例名。或者至少我不知道如何访问它,因为Application.Run(newform1());没有给我举个例子。即使是这样,我也不能从我的A级访问它,是吗?这已经被编辑成你需要的样子了。请注意,有更有效的方法来做到这一点-但我相信这将做的现在。。。