0

すでに開いているC#Winformのラベルのテキストを変更する必要があります。フォームは私のプログラムの別のメソッドから開かれたため、すでに開いており、最初に作成されたときのフォームの元の参照にアクセスできません。

以下のコードでこれを実行しようとしましたが、フォームのラベルにアクセスできません。すでに実行されているフォームのラベルを(別のメソッドから)変更する方法はありますか?

//http://stackoverflow.com/questions/3861602/c-sharp-how-check-if-the-form-is-already-open-and-close-it-if-it-does
Form fc = Application.OpenForms["form1"];

if (fc != null)
{
     //This does not work.  I can not access the lblNewItems label.
     //The label has it's public modifier set to Public and I am able
     //to set this label successfully when I create the form originally
     //from the other method.

     fc.lblNewItems.Text = "Change text"; 
}

上記をコンパイルすると、次のエラーが発生します。

エラー4「System.Windows.Forms.Form」に「lblNewItems」の定義が含まれておらず、「System.Windows.Forms.Form」タイプの最初の引数を受け入れる拡張メソッド「lblNewItems」が見つかりませんでした(ディレクティブまたはアセンブリ参照を使用しますか?)

誰かがこれが可能かどうか、もしそうなら教えてくれませんか。別の方法で既に開いているフォームのラベルを変更するにはどうすればよいですか?

4

2 に答える 2

4

あなたの問題はそれfcがタイプFormであるということですが、あなたのラベルlblNewItemsは実際にはのサブクラスにありFormます(あなたのクラスはForm1質問に基づいていると思います)。fc要素にアクセスする前に、実際のフォームタイプにキャストする必要があります。

Form1 fc = (Form1)Application.OpenForms["form1"];    
if (fc != null)
{
     fc.lblNewItems.Text = "Change text"; 
}
于 2012-09-27T16:20:18.843 に答える
1

フォームは私のプログラムの別のメソッドから開かれたため、すでに開いており、最初に作成されたときのフォームの元の参照にアクセスできません。

Program.csでフォームへのパブリック静的参照を作成して、どのメソッドからでもアクセスできるようにします。ラベルのテキストを設定する前に、Nullをチェックするだけです。

于 2012-09-27T16:05:09.640 に答える