文字列を取り出すには、

Textプロパティを使用します。


例えば、金額を表すオブジェクト名を「Price」とつけていたら、

Price -> Text と記述するとTextプロパティの値を参照することができます。


もしメッセージボックスに表示させたいときは、

MessageBox::Show (Price -> Text)でいいみたい。


うん、ここまでは簡単ね。


F5で実行し、

実際の画面で、金額欄(オブジェクト名:Price)に1000円と入力し、追加ボタンをクリックしたら

はいっ、無事でてきました。


このように直接プロパティを扱うのと、

変数を扱うものがある。

変数を使うと、( )の中が、変数だけを示せる。


String^ money = Price -> Text;

MessageBox::Show (money);


プロパティのを変数に入れて、変数を出す

2段階を踏むわけだけど・・どうしてこうしたほうがいいんだろ?

変数を使用することによって、値に意味を持たせてコードを分かりやすくするってことだけど・・

2行になって私的には分かりにくくなったが?


ところで、また出てきた^ (ハンドル)。

以前の自分のハンドルについての記事を読む。フムフム。役立つ。

でもしっかりとは分からないけどねっ。メモリよね、メモリ。


しかし、C++の時は、cout<< money; とか使っていて、何となく出たっ!って感じだったのに、

VC++になると、

MessageBox::Show (money);

って、地味よね。分かりづらい。


リストボックスに文字を追加するには、


listPrice ->Items->Add (out);


listPriceはリストボックスのオブジェクト名で、

これに追加するには、ItemsプロパティのAddメソッドというのを使う。

それがこれ。

Itemsプロパティは、リストボックスが持っているそれぞれの項目の集まりを表していて、

この集まりを「コレクション」という。たまに見る、コレクションって言葉。意味分からなかったけど、これなのね。このリストボックスをよく使ってるってことね。


お楽しみ!F5でデバッグ。


プログラムを実行~!

あれ、失敗。オブジェクト名のスペルが間違ってた。

修正して、成功!


次に、削除


さっき、追加のことを考えると

listPrice -> Items->Delete(out);

では?と思っていたら、

どうやらそんな単純な問題ではなかったようだ。たら-


まずはステップがあり、

①選択している項目を取得

②次に、選択した項目を削除


選択した項目を取得しなきゃならんのね。

それが、

int index = listPrice->SelectedIndex;


ん?Selectedindexってあったっけ?

リストボックスで選択されている項目(行)の番号を「インデックス」と言います。

これを取得するには、SelectedIndexプロパティを使用します。

へー、最初からSelectされたプロパティっていうのがあるんかいな。便利やね。

しかも、さっきまでString^ 使っていたのに(金額も)

intになったよ。なんで?

リストボックスのカーソル位置の取得は、何番目の項目を取得するかだから、

int だそうな。へー。


int 変数 = リストボックス名 -> SelectedIndex;


これ便利やね。


削除は・・リストボックス名->Items->Addの反対なのはいいのかな?

そうすると、

リストボックス名->Items->Delete

やったー近い!

リストボックス名->Items->RemoveAt (<インデックス>); やって


追加と削除、やってみよー

できた、できた(嬉)








さて、はじめるぞ、VC++。


ブログを書くと記録にはなるので、見直しには丁度いい。

でもつい、芸能ニュースとか見てしまう・・。反省


String^ name

おおーっと、出ました。

^ こんなやつ。

C++ではなかったから、VC++に出てきて、当たり前のように、

説明もほとんどなかったので、意味不明-だったけど。


ハンドル(^)とは、

あらかじめ記憶している領域を指し示すもの


なんじゃそりゃ。

ぼんやりしてる。


String型のハンドルを「name」という名前で宣言しています。


うーん、

変数の値は、直接示す方法(int num)と

ハンドルを使用して間接的に示す方法(String^ name)があります。


直接示す方法は、

これまでC++でやってきたから分かる。

間接的って?


さらにつき進める

「通常の変数は、値そのものを格納しているが、

ポインタ変数は、アドレスを格納しています。」

ふむふむ、ポインタね、それは分かっていますよ。&bとかアドレスを格納する変数を入れてたもんね。

「ハンドルは、ポインタと同様にメモリの場所を示しています」

!!

そうなの!?

「ただし、ポインタはメモリの番地を直接示しますが、

ハンドルは格納されているメモリの識別子を保持しています」


識別子?よお分からんけど、とにかく、ポインタのようにメモリの場所を指すんやね


「大きなメモリサイズの配列やクラスなどの時、

代入のときにメモリのコピーが必要な値型より、

ポインタ変数を利用したほうが効率がいいです」

!!

それで、やたら配列の時にでてきてたんや。


ちなみに、ハンドルは.NET Frameworkがメモリを整理し、

ポインタは解放を行う必要があるが、

ハンドルは自動的に解放が行われる。


便利屋わぁ~


ハンドル変数は、宣言した直後にはどこのハンドルを示しているか分かりません。

そのため、ドコモ示していない場合はnullptr

別の変数のハンドルを代入して初期化をします。


なんとなぁ~く分かった、^。

ライブラリの利用


ライブラリって、用意されているし利用しないとね。

こういうのを利用して短縮化して、仕事を効率化するものなんだろう。


ライブラリを使用する時は、

#include <string>


int main()

{

char str[];

cout<<"文字を入力してください\n";

cin>>str;


cout<<"入力した文字の長さは"<<strlen(str)<<"です。\n";


return 0;

}


なんて文字入れるか分からないからchar str[ ]って空欄にしたんだけど、

これだと通らなかった。数字を入れたらOKだったけど、なんでだろ。


char str1[10];

char str2[10];

char str3[10];


strcpy(str2, "OK");

strcpy(str3, "いいよ");

strcpy(str1, str2);

strcat(str1, str3);


cout<<"str2は"<<str2<<"です。\n";

cout<<"str3は"<<str3<<"です。\n";

cout<<"連結したので"<<str1<<"です。\n";


return 0;

}


おっ、できた。面白い。コピーしたり、くっついたり。

()の1番目にコピーされるのね。簡単。

文字列のコピーや配列への格納の操作に便利っていうけど、確かに、これだといいね。