从Form1访问Form3.pictureBox1

时间:2012-06-29 15:22:47

标签: c# .net winforms

我搜索一种简单的方法来访问不同形式的不同控件,而不需要像我这样做的任何解决方法。 G。在Visual Basic 6中。

示例:

Form3.pictureBox1.Image = MyImage;

但不知何故,C#不允许访问另一个表单上的其他控件,甚至不能访问我自己的类。我已经将Form3中的“pictureBox1”更改为public,如果我键入“Form3”,C#仍然不知道此控件。

我需要做什么才能访问我的控件?我已经使用提升的权限运行Visual Studio(Microsoft在我们的支持区域回答了我的问题,提升的权限对于访问其他表单及其上的控件很重要)但没有任何帮助我使用。所以我现在总是使用C#中的一个表单,这不适合开发任何应用程序。大多数应用程序需要多个表单,因此应该是从类或其他形式的任何上下文访问控件的简单方法。我不想使用任何“设置......或获取属性” - 我甚至不知道如何!在某个地方,我发现了这个特定的解决方法,但我通常在我的应用程序中有很多控件和标签可供访问,如果每个控件属性都需要get-和set-statement或者要写入的任何内容,这会产生大量无用的开销。

即使需要提升,也许有人会以更简单的方式知道更优雅的方法。

4 个答案:

答案 0 :(得分:2)

在VB6中,你可以使用类名访问表单的默认实例,在VB.Net中他们继续这种行为。 C#没有这种行为,因此您必须创建自己的表单实例。否则你试图像静态类一样使用它。即使你不想这样做,你想要的最好的方法就是通过它保存所有内容的属性来公开它们。

Form3 frm3 = new Form3();
frm3.pictureBox1.Image = Image.FromFile("ImageName");
frm3.Show();

答案 1 :(得分:1)

我想我知道出了什么问题。 Form1Form3实际上是类,因此键入Form1.something表示something必须是静态成员。为了能够访问图片,您需要一个类的实例。

为了更好地解释这个,这是一个例子:

string a;

string是类类型,a是该类的实例。

执行此操作的方法是修改启动代码(在Program.cs源文件中的窗体表单中),并将表单保存在静态类中,然后从那里访问它。

这可能是Program.cs的样子:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

您可以看到正在创建Form1的新实例,即new关键字的功能。您还可以执行以下操作:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    Form1 f = new Form1();
    Application.Run(f);
}

变量f包含正在显示的表单。

我真的不知道你的程序是如何工作的,但无论如何......为了能够访问Form3的成员,你需要找到实例。也许你的代码中有new Form3().Show(),我不确切知道......但你需要将它保存到变量中,这就是你可以访问它的方式。

答案 2 :(得分:1)

您需要将对象的修饰符属性更改为public,而不是创建表单实例并调用所需的对象

Form2 frm2 = new Form2();
frm2.show();
frm2.pictureBox1.Image = "MyImage";

答案 3 :(得分:0)

Form3可以参考该课程。您需要使用对象来访问picturebox1(或使字段静态)