【发布时间】:2009-04-04 13:23:49
【问题描述】:
在 form.cs 文件中我有两个按钮,一个备忘录和一个计时器。我的问题是:如何从另一个 cs 文件访问计时器或备忘录?
我尝试公开这些对象,但没有成功,请给我一个来源或项目,以便我看看我错在哪里。
谢谢!
【问题讨论】:
-
那个cs文件在同一个项目吗?
在 form.cs 文件中我有两个按钮,一个备忘录和一个计时器。我的问题是:如何从另一个 cs 文件访问计时器或备忘录?
我尝试公开这些对象,但没有成功,请给我一个来源或项目,以便我看看我错在哪里。
谢谢!
【问题讨论】:
在设计器中选择您的按钮,转到它的属性并将“Modifiers”属性从 Private 更改为 Public。
然后您可以从另一个类访问它,如下所示:
public static class Test
{
public static void DisalbeMyButton()
{
var form = Form.ActiveForm as Form1;
if (form != null)
{
form.MyButton.Enabled = false;
}
}
}
注意:这只是一个例子,绝对不是好的设计模式:-)
【讨论】:
每当我听到有人谈论“另一个 .cs 文件”或“另一个 .vb 文件”时,我都会担心。它通常(尽管并非总是)表明缺乏对编程的理解,至少是对 OO 编程的理解。 在文件中有什么?一节课?两个?
您不是试图从另一个 文件 访问这些东西,而是试图从一个类的方法或可能是 VB 中的一个模块的方法访问它们。
您的问题的答案取决于您尝试访问这些内容的类和方法的性质,以及您想要访问它们的原因。
一旦您编辑了问题以包含此信息,您收到的答案可能会告诉您,您不应该在表单类本身之外的其他类中访问表单的这些私有部分。
【讨论】:
在 Program.cs 中已经实例化了 Form 对象,但它没有引用。通过简单的编辑,您可以打开
Application.Run(new Form1());
到
Application.Run(formInstance = new Form1());
像这样声明
public static Form1 formInstance;
并使用
Program.formInstance.MyFunction(params);
【讨论】:
虽然我同意 John Saunders 的观点,但假设您可以通过公共修饰符访问所有内容,那么您可能做错的一件事就是您没有该表单的实例。
例如,你会这样做:
Form1 myForm = new Form1;
string theButtonTextIAmLookingFor = myForm.MyButton.Text;
我假设您可能会尝试像静态一样访问它,如下所示:
string theButtonTextIAmLookingFor = Form1.MyButton.Text;
只是您可能想要检查的内容。
【讨论】:
直观的选择就是将控制字段公开 这是一个很好的解决方案来解决这个问题..
【讨论】: