Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从C中的另一个cs文件访问表单对象_C#_Forms_Object - Fatal编程技术网

C# 如何从C中的另一个cs文件访问表单对象

C# 如何从C中的另一个cs文件访问表单对象,c#,forms,object,C#,Forms,Object,在form.cs文件中,我有两个按钮,一个备忘录和一个计时器。我的问题是:如何从另一个cs文件访问计时器或备忘录 我曾试图公开这些对象,但没有成功,请给我一个来源或项目,这样我就可以看出我错在哪里了 谢谢 在designer中选择您的按钮,转到其属性并将Modifiers属性从Private更改为Public 然后您可以从另一个类访问它,如下所示: public static class Test { public static void DisalbeMyButton() {

在form.cs文件中,我有两个按钮,一个备忘录和一个计时器。我的问题是:如何从另一个cs文件访问计时器或备忘录

我曾试图公开这些对象,但没有成功,请给我一个来源或项目,这样我就可以看出我错在哪里了


谢谢

在designer中选择您的按钮,转到其属性并将Modifiers属性从Private更改为Public

然后您可以从另一个类访问它,如下所示:

public static class Test
{
    public static void DisalbeMyButton()
    {
        var form = Form.ActiveForm as Form1;

        if (form != null)
        {
            form.MyButton.Enabled = false;
        }
    }
}
string theButtonTextIAmLookingFor = Form1.MyButton.Text;

注意:这只是一个例子,绝对不是好的设计模式:-

每当我听到有人谈论另一个.cs文件或另一个.vb文件时,我都会担心。它通常(尽管不总是)表明缺乏对编程的理解,至少是对OO编程的理解。档案里有什么?一节课?两个

您不是试图从另一个文件访问这些东西,而是试图从类的方法或VB中的模块的方法访问它们

您的问题的答案将取决于您试图从中访问这些东西的类和方法的性质,以及您想要访问它们的原因


一旦你编辑了你的问题以包含这些信息,你收到的答案可能会告诉你,除了表单类本身之外,你不应该在其他类中访问表单的这些私有部分。

虽然我同意John Saunders的观点,但有一件事你可能做错了,假设您可以通过公共修饰符访问所有内容,则您没有该表单的实例

例如,您可以这样做:

Form1 myForm = new Form1;
string theButtonTextIAmLookingFor = myForm.MyButton.Text;
我假设您可能试图像静态一样访问它,如下所示:

public static class Test
{
    public static void DisalbeMyButton()
    {
        var form = Form.ActiveForm as Form1;

        if (form != null)
        {
            form.MyButton.Enabled = false;
        }
    }
}
string theButtonTextIAmLookingFor = Form1.MyButton.Text;

只是一些您可能需要检查的内容。

直观的选择只是将控制字段公开 这里有一个很好的解决方案


Program.cs中已实例化窗体对象,但它没有引用。通过简单的编辑,您可以

Application.Run(new Form1());

宣布它像

public static Form1 formInstance;
和使用

Program.formInstance.MyFunction(params);

抛出新的StackOverflowException;它抛出了一个错误,我已经标记了错误的位置。不起作用。您已经编辑了答案,我已经尝试过了。当我尝试编写Form1.MyButton时,它无法识别它。@John:请查看下面我的答案。NET中的表单与VB6中的表单不同。将Modifiers属性从private更改为public是这个答案的关键部分。同一项目中是否有其他cs文件?+1我怀疑问题远不止属性的可见性。我喜欢这种方法,它使顶级表单始终可用。从我的代码角度来看,ActiveForm的目标是错误的表单,根据所有常规逻辑,这是错误的。