CompactFrameworkを使用してWinCEアプリを作成しています。
Form1とClass1があります。Form1には、Class1からアクセスするために必要なlabel1があります。
私が試してみると:
Form1.label1
Modifierプロパティをpublicに設定したにもかかわらず、表示されません。
どうすればラベルにアクセスできますか?
助けてくれてありがとう!
CompactFrameworkを使用してWinCEアプリを作成しています。
Form1とClass1があります。Form1には、Class1からアクセスするために必要なlabel1があります。
私が試してみると:
Form1.label1
Modifierプロパティをpublicに設定したにもかかわらず、表示されません。
どうすればラベルにアクセスできますか?
助けてくれてありがとう!
問題は、Form1がクラスであり、ラベルが静的ではないため、そのクラスのインスタンスが必要なことです。
var myForm = new Form1(); myForm.label1.Text = "hello";
アプリケーションがフォームを作成した可能性があるため、クラスから新しいフォームを作成する必要はありません。
したがって、フォームをクラスに渡す必要があります。クラスはフォームによってインスタンス化されますか?その場合は、「this」をクラスに渡して、インスタンス化されたフォームへの参照を送信できます。
しかし、実際には、保守が難しいため、これは実行したくありません。フォームがそれ自体を更新するためにサブスクライブできるようなイベントをクラスに発生させる方がよいでしょう。
Form1をClass1にインスタンス化してから、このインスタンスを使用してForm1.label1を設定できます。これはエレガントなソリューションになります。このコードを確認してください:
public partial class Form1 : Form
{
public Label Label1 { get; set; }
public void Caller()
{
MyClass cls = new MyClass();
cls.Form1 = this;
cls.DoSomeJob();
}
}
public class MyClass
{
public Form1 Form1 { get; set; }
public void DoSomeJob()
{
Form1.Label1.Text = "Some text...";
}
}
Form1クラスにプロパティまたはメソッドを作成してlabel1オブジェクトを返すようにしてください