【问题标题】:How to access form objects from another cs file in C#如何在 C# 中从另一个 cs 文件访问表单对象
【发布时间】:2009-04-04 13:23:49
【问题描述】:

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

我尝试公开这些对象,但没有成功,请给我一个来源或项目,以便我看看我错在哪里。

谢谢!

【问题讨论】:

  • 那个cs文件在同一个项目吗?

标签: c# forms object


【解决方案1】:

在设计器中选择您的按钮,转到它的属性并将“Modifiers”属性从 Private 更改为 Public。

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

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

        if (form != null)
        {
            form.MyButton.Enabled = false;
        }
    }
}

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

【讨论】:

  • 抛出新的 StackOverflowException(); ;)
  • pastebin.com/m183c1bcf 会报错,我已经标出了错误的位置。不起作用。
  • 你已经编辑了你的答案,我已经试过了。当我尝试写“Form1.MyButton”时它无法识别它。
  • @John:请看下面我的回答。 .NET 中的表单不像 VB6 中的表单那样工作。
  • 将“Modifiers”属性从“private”更改为“public”是此答案的关键部分。
【解决方案2】:

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

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

您的问题的答案取决于您尝试访问这些内容的类和方法的性质,以及您想要访问它们的原因。

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

【讨论】:

  • +1 我怀疑问题远不止属性的可见性。
【解决方案3】:

在 Program.cs 中已经实例化了 Form 对象,但它没有引用。通过简单的编辑,您可以打开

Application.Run(new Form1());

Application.Run(formInstance = new Form1());

像这样声明

public static Form1 formInstance;

并使用

Program.formInstance.MyFunction(params);

【讨论】:

  • 我喜欢这种方法,它使顶层表单始终可用。我在 ActiveForm 定位错误表单时遇到问题(从我的代码的角度来看是错误的,按照所有传统逻辑都是正确的。)
【解决方案4】:

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

例如,你会这样做:

Form1 myForm = new Form1;
string theButtonTextIAmLookingFor = myForm.MyButton.Text;

我假设您可能会尝试像静态一样访问它,如下所示:

string theButtonTextIAmLookingFor = Form1.MyButton.Text;

只是您可能想要检查的内容。

【讨论】:

    【解决方案5】:

    直观的选择就是将控制字段公开 这是一个很好的解决方案来解决这个问题..

    http://searchwindevelopment.techtarget.com/answer/In-C-how-can-I-change-the-properties-of-controls-on-another-form

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多