-1

我搜索了一种简单的方法来访问不同表单上的不同控件,而无需像在 Visual Basic 6 中那样做任何变通方法。

例子:

Form3.pictureBox1.Image = MyImage;

但不知何故,C# 不允许访问其他表单上的其他控件,即使是我自己的类也不行。我已经将pictureBox1Form3 中的“”更改为public,如果我键入“Form3.”,C# 仍然不知道这个控件。

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

也许你们中的某个人知道一种更优雅的方法来以更简单的方式做到这一点,即使需要提升。

4

4 回答 4

2

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

Form3 frm3 = new Form3();
frm3.pictureBox1.Image = Image.FromFile("ImageName");
frm3.Show();
于 2012-06-29T16:13:37.560 回答
1

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

为了更好地解释这一点,这里有一个例子:

string a;

string是类类型,并且a是该类的一个实例。

一种方法是修改启动代码(在Program.cs源文件中的 windows 窗体中),并将窗体保存在静态类中,然后从那里访问它。

这就是 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()的代码中有某个地方,我不知道确切...但是您需要将其保存到变量中,这就是您可以访问它的方式。

于 2012-06-29T15:29:11.600 回答
1

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

Form2 frm2 = new Form2();
frm2.show();
frm2.pictureBox1.Image = "MyImage";
于 2012-06-29T15:53:26.390 回答
0

Form3 可以引用类。您需要使用一个对象来访问picturebox1(或使该字段静态)

于 2012-06-29T15:28:42.370 回答