■99786 / ) |
Re[3]: コードでlabelを追加する方法 |
□投稿者/ 魔界の仮面弁士 (3383回)-(2022/06/02(Thu) 17:53:45)
|
■No99785 (あいす さん) に返信 > > Controls.Add メソッドですね。 > ありがとうございます。
(1) 提示されたコードに、肝心の Controls.Add が書かれていないですよ…?
> public partial class FormBLEMulti : Form > { > private System.Windows.Forms.Label lblval;
この lblVal は、「FormBLEMulti クラスが持つインスタンス変数」ですよね。 ここまでは良いとして…。
> public class DispPanel > { > FormBLEMulti.lblval = new System.Windows.Forms.Label();
ここ、文法的にいろいろおかしいですが、 どういう意図で書かれていますか?
(2) 入れ子構造のクラス内クラスになっているのはわざとですか? 「public class DispPanel」というクラス宣言ではなく 「public void DispPanel()」などのメソッド宣言であるのなら まだ分からなくも無いですが…。
もしも本当に内部クラスとしたいのであれば、そのクラスを呼び出すためのコードも必要です。
(3) FormBLEMulti の直下にある「private System.Windows.Forms.Label lblval;」のように、 クラスの直下で「Label 変数;」や「Label 変数 = new Label();」といった 『変数宣言』を行うことは問題ありません。
しかしクラスの直下で「変数 = new Label();」のような代入処理を書くことはできないので 構文エラーとなります。 「FormBLEMulti.lblval = new System.Windows.Forms.Label();」のような処理を書きたいのであれば、 クラスの直下ではなく、クラスの下にメソッドかコンストラクタを置き、その内に記述しましょう。
(4) 「FormBLEMulti.lblval = new Label();」と書かれていますが、 lblVal は静的フィールド変数ではなく、インスタンス フィールド変数です。
文法的な問題だけなら、static に変更すればコンパイルは出来ますが… それではプログラムの意図として不自然ですね。
public partial class FormBLEMulti : Form { private static System.Windows.Forms.Label lblval; // 静的フィールドに変更 public class DispPanel { public void Test1() // メソッドを追加 { FormBLEMulti.lblval = new System.Windows.Forms.Label(); } } }
元のインスタンス フィールドのままにしたいのであれば、 どのインスタンスの lblval を操作したいのかを明示せねばなりません。
public partial class FormBLEMulti : Form { private System.Windows.Forms.Label lblval; // インスタンス フィールドのまま public class DispPanel { internal DispPanel(FormBLEMulti owner) // 引数でインスタンスを渡す { owner.lblval = new System.Windows.Forms.Label(); } } }
|
|