• 締切済み

VC++ label などのプロパティ設定

C++初心者です。 ご教授よろしくお願いします。 Visual Basic C++ において、 label,button などのプロパティ設定を行う際、 this->label3->Name = L"label3" といった固定値での設定ではなく、変数で設定を行いたいと考えています。 イメージはこのような感じです。 this->label$i->Name = L"label$i" 最終的には、for文で回して、以下のような設定をしたいと考えています。 for(i=1;i<=3;i++){ this->label$i->Name = L"label$i"; } おおよそ以上のようなことをしたいのですが、 実際にどういったコードを記述すればよいかわかりません。 どなたかご教授よろしくお願いします。

みんなの回答

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.4

No1 です 他の方の回答通知が来て改めて内容見たときに気が付いたのですが 代入するコントロールの方も違ってたのね   見落としてました クラスウイザードの標準操作ではメンバ変数に配列を使うことはできないはずなので 自分で手を加えて細工することになります 手っ取り早くやるならそのコントロールを ポインタ等の配列に代入して使うのがいいでしょう 以下 不足してた部分の雑なサンプル Labei *LabekPtr[3]; //変数の型は 実際のコントロールのものに合わせてください LabekPtr[0] = this->labe1; LabekPtr[1] = this->labe2; LabekPtr[2] = this->labe3; for(int i = 0; i < 3 ; i ++) {  LabekPtr[i]->Name = }

回答No.3

> Visual Basic C++ において、 なるほど(w)ネタです。 私のほうが、VC++ではなく、C++のプログラマなので、多少用語が違うのは気にせず~ this->label3->Name = L"label3" "Name"は実体を持っているワークでしょうか?それで多少変わる感じがありますね。 上の書き方は、Nameはポインター型で(const char *)"label3"; 的な書式なので、 だとすれば、、 No1さんのやつが、一番近いですね。 元の、プロトタイプを this->label1 this->label2 this->label3 ではなく、 this->label[n] で定義すれば、相当楽になると思いますよ。 char buffer[100]; for(i=1;i<=3;i++) {  sprintf(buffer,"label%d",i);  this->label[i].Name = strdup(buffer); // 実体の場合  this->label[i]->Name = strdup(buffer); // 参照構造体の場合 } strdupは、 char *p; p=malloc(strlen(buffer)+1); // \0 の分を追加。 strcpy(p,buffer); return(p); と等価の関数です。 実体を生成させるために書いています。 これがないと、初期化されていないポインターへの直コピー=一般保護例外が出るはずです。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

this->label1->Name = L"label1" this->label2->Name = L"label2" this->label3->Name = L"label3" ということですよね。 基本、C言語では(スクリプト言語で採用されているような) label$i とか L"label$i" で変数iを展開する、といったことはできない、とお考えください。 (そもそも、$変数名 などという使い方自体しません) ・文字列はsprintf等の文字列変換関数を使って作る ・コントロールは、配列に入れて labels[i]等とする

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

一例として 確認してないんで間違ってるかも(流れはわかると思います) TCHAR buffrt[100]; for(i=1;i<=3;i++){  sprintf(buffer, L"Labev%d", i);  this->label$i->Name = buffer; //個人的には SetWindowText 使う気がするけど } みたいな感じでいいかと SetWindowText

関連するQ&A