-1

Visual Basic 6などで行うような回避策なしで、さまざまなフォームのさまざまなコントロールにアクセスする簡単な方法を探しています。

例:

Form3.pictureBox1.Image = MyImage;

しかし、どういうわけか、C#では、自分のクラスからでも、別のフォームの別のコントロールにアクセスすることはできません。すでにForm3の「pictureBox1」をに変更しましたが、「Form3」と入力しpublicてもC#はこのコントロールを認識しません。

コントロールにアクセスするには、何をする必要がありますか?私はすでに昇格された特権でVisualStudioを実行しています(Microsoftはサポートエリアで私の質問に答えました。昇格された特権は他のフォームとそのコントロールにアクセスするために重要です)が、何も助けにはなりませんでした。そのため、私は常にC#の1つのフォームを使用していますが、これはアプリケーションの開発には適していません。ほとんどのアプリケーションには複数のフォームが必要であるため、クラスまたは別のフォームの任意のコンテキストからコントロールにアクセスする簡単な方法が必要です。「set...またはgetproperties」は使いたくない-方法すらわからない!どこかでこの特定の回避策を見つけましたが、通常、アプリケーションでアクセスするコントロールとラベルが非常に多いため、各コントロールプロパティにget-およびset-ステートメントなどを書き込む必要がある場合、これにより多くの無駄なオーバーヘッドが発生します。

標高が必要な場合でも、より簡単な方法でこれを行うためのより洗練された方法を知っている人がいるかもしれません。

4

4 に答える 4

2

VB6では、クラス名を使用してフォームのデフォルトインスタンスにアクセスできますが、VB.Netではその動作を継続しています。C#にはそのような動作がないため、フォームの独自のインスタンスを作成する必要があります。それ以外の場合は、静的クラスのように使用しようとしています。したくない場合でも、必要なことを行うための最良の方法は、すべてをカプセル化したままにするプロパティを介してそれらを公開することです。

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

私は何が悪いのか知っていると思います。Form1Form3は実際にはクラスであるため、入力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

フォームのインスタンスを作成して必要なオブジェクトを呼び出すよりも、オブジェクトの修飾子プロパティをpublicに変更する必要があります

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 に答える