C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 173 を表示中)
■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();
   }
  }
 }

返信 編集キー/


管理者用

- Child Tree -