コントロールの配列に関して – プログラミング – Home

コントロールの配列に関して
 
通知
すべてクリア

[解決済] コントロールの配列に関して

固定ページ 1 / 2

渡辺
 渡辺
(@渡辺)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

お世話になります。

Labelのプロパティ変更に関してですが、Labelが1~128まであり、事前の計算式より
100ms間隔で算出した値をlabel番号とし、そのlabelのbackcolorを通常controlを
Highlightに変える様にしたく、算出された値以外は、controlのままとし、次に算出した
label番号が変われば、その変わった番号のlabelをHighlightにし、前のは、controlに戻
すようにしたいと思っています。
case分などでも考えましたが、配列を使った方法で解決できる方法はありませんでしょう
か。


引用未解決
トピックタグ
渡辺
 渡辺
(@渡辺)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

環境は、Windwos7 VC++2010 expressになります。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

LabelとはStaticコントロールのことでしょうか。
ご希望の機能が、
 1.文字列の色、又は背景色を頻繁に変えたい。
 2.その文字列をクリックしてもアクションはしない。
のであれば、単純にTextOut()を使ったほうが
はるかに早いし、コードも単純になると思うのですが。

いずれにしても
 3.Labelクラスはどの様に設計しましたでしょうか。
 4.それを配列にした場合の問題点が想像できません。
なのですが、どうでしょう。


返信引用
渡辺
 渡辺
(@渡辺)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

labelは、Staticコントロールになります。
labelは、NumericUpDown(Staticコントロール)の表示番号としてあるだけなんですが、
128個あるのですぐに何処にあるか認識できないため、今どの番号の値が適用されている
かを分かりやすくするため、その時だけLabelのバッグカラーを通常のcontrolからHighli
ghtに変更したいと思っています。

以上よろしくお願いします。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

>labelは、Staticコントロールになります。
了解しました。で、不本意ながら

 3.Labelクラスはどの様に設計しましたでしょうか。
 4.それを配列にした場合の問題点が想像できません

について、もう一度訪ねなければなりませなが、どうでしょう。
単に画面に並べただけではないはずですよね。

一般に、同質のオブジェクトが多数ある場合は、
それらを配列にするのが普通です。
たぶん「3.」の意味するクラスインスタンス(128個)を、
「4.」のクラスで配列内に取り込んで、管理する形になると思いますが、
どのようにお考えでしょう。


返信引用
渡辺
 渡辺
(@渡辺)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

仲澤@失業者様

Labelは、128個画面に並べ、個々に表示位置、表示文字を設定しています。
配列にするのが普通と言うこと自体知りませんでした。すみません。
このあたりから教えて頂けますでしょうか。


返信引用
渡辺
 渡辺
(@渡辺)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

以下(一部省略)の内容をスマートに記述する方法を知りたいのですが、

intVRsetNo =(A-B);
this->label22->BackColor = System::Drawing::SystemColors::Control;
this->label23->BackColor = System::Drawing::SystemColors::Control;
this->label29->BackColor = System::Drawing::SystemColors::Control;
this->label30->BackColor = System::Drawing::SystemColors::Control;
this->label31->BackColor = System::Drawing::SystemColors::Control;




this->label154->BackColor = System::Drawing::SystemColors::Control;
switch( VRsetNo )
{
case 0 :this->label22->BackColor = System::Drawing::SystemColors::Highlight;
break ;
case 1 :this->label23->BackColor = System::Drawing::SystemColors::Highlight;
break ;
case 2 :this->label29->BackColor = System::Drawing::SystemColors::Highlight;
break ;
case 3 :this->label30->BackColor = System::Drawing::SystemColors::Highlight;
break ;
case 4 :this->label31->BackColor = System::Drawing::SystemColors::Highlight;
break ;




case 127 :this->label154->BackColor = System::Drawing::SystemColors::Highlight;
break ;
}


返信引用
紅'
 紅'
(@紅')
ゲスト
結合: 17年前
投稿: 48
 

mfc です?

配列に入れとくんじゃダメなの?
CWnd* controls[] = { this->labe001, ... , this->label28, NULL };
みたいにしてループで回すとか。
for( int i = 0; controls[i] != NULL; ++i ) controls[i]->BackColor( i == [対象の
番号] ? Highlight : [他の色] );
みたいに。

判定方法が最初からの通し番号だけじゃないなら、判定に必要な情報とコントロールのポ
インタを構造体にして配列にすればいいように思うのですけれど。
コントロールの名前付け規則があるなら名前そのものを文字列として作成して、GetDlgIt
em() (だっけ?)を使ってコントロールの実態を取得する方法もあるし。


返信引用
渡辺
 渡辺
(@渡辺)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

紅' さん

ありがとうございます。
配列等でスマートにまとめたかったので、
このようなコントロールを配列に入れられるとは思っていなかったので、
教えて頂いた方法を試してみます。


返信引用
渡辺
 渡辺
(@渡辺)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

CWnd* controlsの配列をコンパイルすると定義されていない識別子ですとなります。
VC++2010 expressでは、CWndは、使えないのでしょうか。

宜しくお願いします。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

2014/12/19(金) 14:50:47 の発言を見るに、今作っているのは
C++/CLI (manage) による Windows Form App だから
native C++ MFC なコードを C++/CLI Form App 中に記述しても通らないに決まっている。

CWnd* な配列でなくて Form^ な配列を作らなきゃ。

C++/CLI ってのは C++ ぢゃないんだよ。別言語。
Visual C++ は1つのコンパイラで C と C++ と C++/CLI の3言語に対応してるんだ。
C++/CLI Form App ってのはもう新規開発は推奨されていない。
大量のコードを既に書いちゃったなら別だけど C# への方針変更を推奨する。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

横から失礼します。
MFC使ってたなら、W32SDK使う方法もあると思うけど。
まだ、W32SDKのサイトもあるし、MSDNlibraryも健在なんで(^^;
VC++2010 expressなら、インストール次第で可能ですよね。
まだ、コード途中なら、自分にとって最適なのをえらぶといいよ。


返信引用
蒼の洞窟
 蒼の洞窟
(@蒼の洞窟)
ゲスト
結合: 12年前
投稿: 28
 

いきなりWin32 SDKでWindowsアプリを作成するには結構厳しいですね。
(ExpressだとMFCもついてないですし。WTLを入れれたりしたっけ?)

https://support2.microsoft.com/kb/3001686
>>マイクロソフトでは、Visual C++ (C++/CLI) を使用した Windows フォームアプリケー
ションの作成は、推奨しておりません。
>>C++/CLI は、マネージ コード と アンマネージ コードの相互運用を行う目的でのみ使
用してください。

自分もtetrapodさんと同じ意見で、C#で作り直して、どうしてもC++でしか書けない部分
のみをC++/CLIでクラスライブラリを作ったほうがよいですね。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

今後のことを考えるとC#をやっとくのが有利だとは思います。
もし、C++(ネイティブ)を選択するのなら、最近は

「Visual Studio Community 2013」
http://www.microsoft.com/ja-jp/dev/products/community.aspx

という選択肢もありますね。
「でもお高いんでしょう」
「いいえ奥様、ただでMFCが付いてきます。」
「えぇ~・・・」

Professionalが無料(?)って感じ(ライセンスに制限あり)。


返信引用
渡辺
 渡辺
(@渡辺)
ゲスト
結合: 23年前
投稿: 12
Topic starter  

もともとあるアプリからの追加となるため、現状の開発環境で行う必要がありました。
私自身もWindowsアプリは初めてなので、もともとのソースを見ながら行えたので短時間
で進めてこられました。
これからC#となると、かなり厳しい状況です。
現状の開発環境でcontrolの配列は、出来ないのでしょうか。
また、出来る場合は、tetrapodの言うForm^ な配列なのでしょうか。
Form^ な配列は、どの様に作れば良いのでしょうか。

すみませんがよろしくお願い致します。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました