• ベストアンサー

C++Builder6.0 Memoの表示内容を1つのButtonをクリックごとに表示内容を変える

Form上のMemoコンポーネントにButtonを1度クリックすると Memo1->Lines->LoadFromFile->(\"a.txt\"); a.txtをMemoに表示し、(ここまでは表示できています) 同じButtonをクリック(2回目)すると a.txtとは違う内容をLoadFromFileを使って表示したいのですが、どのように表記したらよいのでしょうか。 ちなみにクリック3回目も違う内容の.txtを読み込みたいと思っているのですが… アドバイスございましたら宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yasuch
  • ベストアンサー率41% (27/65)
回答No.4

void __fastcall TForm1::Button1Click(TObject *Sender) { static int cnt = 0; switch(cnt) { case 0: Memo1->Lines->LoadFromFile("a.txt"); break; case 1: Memo1->Lines->LoadFromFile("b.txt"); break; case 2: Memo1->Lines->LoadFromFile("c.txt"); break; } cnt = (cnt + 1) % 3; }

その他の回答 (4)

  • yasuch
  • ベストアンサー率41% (27/65)
回答No.5

void __fastcall TForm1::Button1Click(TObject *Sender) { static int cnt = 0; char fname[][10] = {"a.txt", "b.txt", "c.txt"}; Memo1->Lines->LoadFromFile(fname[cnt++ % 3]); }

makefile
質問者

お礼

#4の御礼もご一緒にさせていただきます。 私の考えと、それよりもっと短い表現の両方から書いて下さり、ご親切にありがとうございました。 以前にも私の質問にyasuchさんがお答えしくれたのをおぼえております。 こんな初心者にもかかわらず、お答えを下さり、ありがとうございます。 大変参考になりました。

回答No.3

> 1回目はa.txt > 2回目はb.txt > を読みこむということがSwitch~Caseでできないかなと私が考えたまでです。 …なにが問題なのかわからんです。 const char* files[N] = { "a.txt", "b.txt", ... }; int count; // 0..N-1 の範囲 を用意し、ボタンが押されるたびに ++count して files[count] を LoadFromFile に与えればいいと思うけど。

makefile
質問者

お礼

お返事ありがとうございます。 私の知識の乏しさから、お話が上手くできなかったみたいですみませんでした。お答えありがとうございました。

回答No.2

> ButtonのClickをカウントするなんてことは可能でしょうか。 …何が問題なのかしら? カウンタとなる変数を用意して、ボタンが押されるたびにインクリメントすればいい。

makefile
質問者

お礼

Buttonをカウントすることによって 1回目はa.txt 2回目はb.txt を読みこむということがSwitch~Caseでできないかなと私が考えたまでです。 まったく初心者なものですみません…。 参考書にLoadFromFileを見つけたのですが、 epistemeさんのはじめにおっしゃった文字列に置き換えるというのを、よろしければ教えて頂けませんか。 ネットでもヘルプ読んでも書き方が理解できなくて… すみません。具体的に書いて頂けたらありがたいです。

回答No.1

"a.txt"改め適当な文字列型の変数にしておいて、クリックされるたびにその内容を書き換えれば。

makefile
質問者

お礼

お早くお返事ありがとうございます。 >クリックされるたびにその内容を書き換えれば。 変数の内容はどのように書けばいいのでしょうか。 私が考えた案ではButtonClickをカウントして、Switch~Caseでできないかと考えたのですが、ButtonのClickをカウントするなんてことは可能でしょうか。

関連するQ&A