• ベストアンサー

C++BuilderのRadioGroupについて

今、単純にラジオグループを作成し、RadioGroupのItemsを3つ、それぞれ「a」、「b」、「c」と設定して、そのアルファベットのラジオボタンが押されたらTEditにそのアルファベットを表示させるというものを作成していますが、うまくいきません。どなたかアドバイスお願いします。 現在のプログラムを以下に書きます。 RadioGroup = new RadioGroup(Form1); RadioGroup->Items->Add("a"); RadioGroup->Items->Add("b"); RadioGroup->Items->Add("c"); if(RadioGroup->ItemIndex==0) Edit1->Text="a"; else if(RadioGroup->ItemIndex==1) Edit1->Text="b"; else if(RadioGroup->ItemIndex==2) Edit1->Text="c"; else Edit1->Text="not Selected";

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

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.2

( No.1 さんより手軽に・・。C++Builder5 )  ・フォームに「 RadioGroup 」を1つ置きます。  ・左の「オブジェクトインスペクタ」の「 Items の右端・・・」をつつきます。  ・a(リターン)b(リターン)c(リターン)と入力します。 つぎに、  ・フォームに「 Edit 」を1つ置きます。  ・左の「オブジェクトインスペクタ」の「 Text 」に not Selected(質問者様のソースから)と入れます。 以上で、フォームの設計(それぞれの大きさなどは、動いてから調整)が終了。 つぎに、  ・フォーム上の RadioGroup1 をダブルクリック(★★★重要:RadioGroup と Builder が結合)します。  ・エディタが開きますので、カーソル位置に if( 0 == RadioGroup1->ItemIndex ) Edit1->Text = "a"; if( 1 == RadioGroup1->ItemIndex ) Edit1->Text = "b"; if( 2 == RadioGroup1->ItemIndex ) Edit1->Text = "c";  を入力します( else は不要)。 以上で、完成ですので、実行(F9)。 ソースをいじくるのは、3行だけです。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.1

Project1を新規作成して、Form1にEdit1を配置。 Form1を「テキストとして表示」して、以下をコピペ。 ==========Form1のテキスト表示ここから========== object Form1: TForm1 Left = 191 Top = 114 Width = 373 Height = 168 Caption = 'Form1' Color = clBtnFace Font.Charset = SHIFTJIS_CHARSET Font.Color = clWindowText Font.Height = -12 Font.Name = 'MS Pゴシック' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate OnDestroy = FormDestroy PixelsPerInch = 96 TextHeight = 12 object Edit1: TEdit Left = 8 Top = 112 Width = 345 Height = 20 TabOrder = 0 Text = 'Edit1' end end ==========Form1のテキスト表示ここまで========== コピペしたら「フォームとして表示」に戻して、以下のソースコードに差し替え。 ==========Project1.cppここから========== //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop USERES("Project1.res"); USEFORM("Unit1.cpp", Form1); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //--------------------------------------------------------------------------- ==========Project1.cppここまで========== ==========Unit1.hここから========== //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE 管理のコンポーネント TEdit *Edit1; void __fastcall FormCreate(TObject *Sender); void __fastcall RadioGroupClick(TObject *Sender); void __fastcall FormDestroy(TObject *Sender); private: // ユーザー宣言 public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif ==========Unit1.hここまで========== ==========Unit1.cppここから========== //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; TRadioGroup *RadioGroup; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { RadioGroup = new TRadioGroup(Form1->Handle); RadioGroup->Items->Add("a"); RadioGroup->Items->Add("b"); RadioGroup->Items->Add("c"); RadioGroup->ItemIndex = -1; RadioGroup->Color = Form1->Color; RadioGroup->Width = 300; RadioGroup->Height = 80; RadioGroup->Left = 10; RadioGroup->Top = 10; RadioGroup->Caption = "RadioGroup Test"; RadioGroup->Ctl3D = true; RadioGroup->OnClick = RadioGroupClick; } //--------------------------------------------------------------------------- void __fastcall TForm1::RadioGroupClick(TObject *Sender) { if(RadioGroup->ItemIndex==0) Edit1->Text="a"; else if(RadioGroup->ItemIndex==1) Edit1->Text="b"; else if(RadioGroup->ItemIndex==2) Edit1->Text="c"; else Edit1->Text="not Selected"; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { delete RadioGroup; } //--------------------------------------------------------------------------- ==========Unit1.cppここまで========== 差し替えたらコンパイルして実行。

関連するQ&A

  • c++ builder 6

    ++builder6で文字列「学校の花壇」などと入力すると、x[0]=学,x[1]=校,x[2]=の・・・・などと格納するプログラムを作ろうと思ってます。文字列をそのままコピーするプログラムは以下のようにして出来ました。 AnsiString strw,str; int po,po2,p,l; str="okw"; p=0; strw = Edit1->Text; l=strw.Length(); n=0; while (p != l){ p=p+1; po = p; po2 = po+1; if(strw.ByteType(po2) == mbTrailByte){ po2=po+1; str =str+ strw[po] + strw[po2]; }else if(strw.ByteType(po) == mbSingleByte){ str=str+strw[po]; } } ですが格納しようとして以下のようにすると上手く動きません。どうしたらよいのでしょうか?どなたか助けてください。 AnsiString strw,str,x[15]; int po,po2,p,n,l; str="okw"; p=0; strw = Edit1->Text; l=strw.Length(); n=0; while (p != l){ p=p+1; po = p; po2 = po+1; if(strw.ByteType(po2) == mbTrailByte){ po2=po+1; x[n] = strw[po] + strw[po2]; n=n+1; }else if(strw.ByteType(po) == mbSingleByte){ x[n]=strw[po]; n= +1; } } どうかよろしくお願いします

  • C++BuilderにてEFCreateErrorが回避できません

    こんにちは。プログラミング初心者でくだらない質問だったら申し訳ないのですが、調べてもどうしても解決できなかったので質問させて下さい。お手数をおかけしますが宜しくお願い致します。 C++Builderにて単純なプログラムを作成しています。 内容はTEditコンポーネント,TButtonコンポーネント,TOpenDialogコンポーネントを設置し、TButtonのクリックイベントでOpenDialogのExcecuteメソッドを呼びます。 ExcecuteメソッドがtrueだったらOpenDialogのFileNameプロパティの値をTEditのTextにコピーし、そのText、つまりファイルのフルパスをExtractFileName関数でファイル名のみにした値をTStringList型にAddします。 そして最後に保存ボタンクリックでTStringListオブジェクトのSaveToFileメソッドで保存する、という内容なのですが、保存ボタンクリック時にEFCreateErrorが発生してしまいます。 常に発生するのであれば原因も絞れるのですが、「OpenDialogのExcecuteメソッドを呼び出した場合のみ」という条件で例外が発生してしまい、原因が分からず困っております。 つまり、手入力でTEditに入力した場合などは正しく保存できるのですが、OpenDialogにてファイルパスを選択した場合のみ発生してしまいます。 これはどのような原因が考えられますでしょうか?

  • デバックができない C#

    visual studio2010で簡易な電卓を作成しているのですが、 デバックができません。 ちなみに下記のようなプログラムです。 ※文字数の制限から、関係する部分のみピックアップしてます。 ラジオボタンがクリックされた際に足し算を行うプログラムです。 public float Add( string i,string j) //変数Addに足し算の結果を返す { return float.Parse(i) + float.Parse(j); //変数i,jをfloat型に変換して、足し算を行う } public void radioButton1_CheckedChanged(object sender, EventArgs e) { if (radioButton1.Checked) { string a = value1.Text; string b = value2.Text; anslabel1.Text = Add(a,b).ToString(); //データ型から文字列型への変換 } もし誤りがありましたら、指摘して頂けますと幸いです。

  • Borland C++ Builder

    void __fastcall TForm1::Timer1Timer(Object* Sender) { a=?; b=?; c=?; for (int y= 1; y<4; ++y){   char z[3][1]; z[1][1]='a'; z[2][1]='b'; z[3][1]='c'; Form1->Image1->Picture->Bitmap->LoadFromResorceName((int)HInstance,"z[y][1]"); } } Image1にa→b→cと一秒間隔で順番に画像を出力したいのです。 ?の部分に画像イメージを割り当ててforでまわせばいいと思ったのですがどう記述すれば割り当てられるのかが分かりません。 それと、この書き方でImage1に順番に出力できるのでしょうか。教えてください。

  • C++で困っています。かなり初歩的だと思いますがよろしくお願いします。

    C++で困っています。かなり初歩的だと思いますがよろしくお願いします。 ぼくは今C++をVS2008コンパイラを使って学んでいます。 参考書として、柴田望洋様著の「明解C++入門編」というものを読んでいます。 そこで演習問題として以下の問題が出されました。 「キーボードから読み込んだ三つの整数の中央値を求めて表示するプログラムを作成せよ。」 *たとえば2,3,1だったら2で、1,2,1だったら1で、3,3,3だったら中央値は3です。 そこで僕は以下のようなコードを書きました。 #include<iostream> using namespace std; int main() {     int a, b, c;     cout << "三つ入力してください";     cin >> a >> b >> c;     int center = a;     if(center < b && center < c)         if(b > c)             center = c;         else             center = b;     if(center > b && center > c)         if(b > c)             center = b;         else             center = c;         cout << "中間値は" << center << "です" << endl;     return 0; } しかし当本では演習問題をより考えてもらうために答えがありません。 一応はこれで指定されたとおりに実行はできるのですが、やはりまだコードが長い気がしてなりません。 考えてもこれ以上のものが考え付かないのですが、これより短く効率の良いものがあるとは思うことができるのです。 そこで本題ですが、もっとコードを短縮して書くことはできないでしょうか? 是非ともよろしくお願いします!

  • firefoxでjavascriptが…

    現在、二つのセレクトボックス間でデータのやり取りをするjavascriptを製作しております。ieでは問題なく動作するのですが、firefoxだと セレクトボックスの移動ボタンを押すと余計なものまで消えてしまいます。どなたかご教授ください。 javascript↓ var master_selected_value; var master_selected_text; var user_selected_value; var user_selected_text; function select_master(a){ master_selected_text = a.master_list.options[a.master_list.selectedIndex].text; master_selected_value = a.master_list.options[a.master_list.selectedIndex].value; } function select_user(a){ user_selected_text = a.select_list.options[a.select_list.selectedIndex].text; user_selected_value = a.select_list.options[a.select_list.selectedIndex].value; } function portlet_move(a,b,c){ if( 1 == b ){ var sw = 0; for( n = 0 ; n < a.select_list.length ; n ++ ){ if( a.select_list.options[n].text == master_selected_text){ sw = 1; } } if( sw == 0 && master_selected_text != null ){ a.select_list.options[a.select_list.length] = new Option(master_selected_text,master_selected_value); } }else{ if( null != user_selected_text ){ for( n = a.select_list.selectedIndex ; n < a.select_list.length - 1; n ++ ){ a.select_list.options[n] = a.select_list.options[n + 1]; } a.select_list.length = a.select_list.length - 1; } user_selected_text = null; user_selected_value = null; } } function data_sum(a,b){ var buff = ""; for( n = 0 ; n < a.select_list.length ; n ++ ){ buff = buff + a.select_list.options[n].value; } a.select_list_data.value = buff; a.type.value = b; a.submit(); } function data_send(a,b){ var buff = ""; for( n = 0 ; n < a.select_list.length ; n ++ ){ buff = buff + a.select_list.options[n].value; } a.select_list_data.value = buff; a.type.value = b; a.send.value = "true"; a.submit(); } html↓ <form method="post" action="test.php" onsubmit="return moveItemSelect('ListBox1','ListBox2');"> <input type="hidden" name="type" value=""> <input type="hidden" name="select_list_data" value=""> <input type="hidden" name="send" value=""> <table> <tr> <td> <select name="type" onchange="data_sum(this.form,'recommended');"> <option value="a" selected="selected">a</option> <option value="b">b</option> </select> </td> <td></td> <td></td> </tr> <tr> <td> <select size="10" name="master_list" onchange="select_master(this.form);"> <option value="1">1</option> <option value="2">2</option> </select> </td> <td> <input type="button" class="button" value="→" onclick="portlet_move(this.form,1,2);"> <br /> <input type="button" class="button" value="←" onclick="portlet_move(this.form,2,1);"> </td> <td> <select size="10" name="select_list" onchange="select_user(this.form);"> <option value="1">1</option> </select> </td> </tr> <tr> <td colspan="3"><input type="button" class="button" value="登録" onclick="data_send(this.form,'recommended_write');" /></td> </tr> </table> </form>

  • C++の二次方程式のプログラム

    #include <iostream> #include <cmath> using namespace std; int main() { double a,b,c; cin >> a >> b >> c; if(a==0) { cout << (-c/b) << '\n'; } else if((b*b-4*a*c)<0) { cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; } else { cout << (-b/2/a) << sqrt(4*a*c+b*b)/2/a << '\n'; } return 0; } 最後のelseの下のcoutが本当に分からないんで教えてくださいお願いします。一応この条件(a=0の時、aが0以上の時、aが0以下の時)で出題されてるんですが…

  • if文の使い方について

    if文でaの値とbの値とcの値が一緒なら次の処理を行うものを作成したいのですが。 if($a==$b==$c){ 行いたい処理 }else{ その他の処理 } と書いたのですが、ダメで if($a=$b=$c){ 行いたい処理 }else{ その他の処理 } と書いたのですが、これもダメでした。 if($a==$b) {  if($b==$c)  {    処理   }else{     その他の処理   } }else{ その他の処理 } と書かいたら実行されたのですが、このように分けて書かないとダメなのですか? いいやり方がありましたら教えてください

    • ベストアンサー
    • PHP
  • リストボックスのアイテムをマウスで並べ替えたいです

    リストボックスのアイテムをマウスのドラッグドロップで並べ替えたいのですが、 下のような感じで書いてみたのですが、 この状態だと、4番目のものを一番上に持ってくるという動作だけするのですが、 4番目から3番目に移動する場合や、1番目から3番目に移動する場合など 追加していくとIFが重なってきてすごくややこしくなってしまいます。 もっと分かりやすくて合理的な方法がありましたら、 大体でも良いですので、教えて頂けたら助かります。 よろしくおねがいいたします。 Private Sub Form1_Load(...略 ListBox1.Items.Add("AAA") ListBox1.Items.Add("BBB") ListBox1.Items.Add("CCC") ListBox1.Items.Add("EEE") End Sub Private Sub ListBox1_MouseDown(...略 SelectedSortFrom = ListBox1.SelectedIndex End Sub Private Sub ListBox1_MouseUp(...略 SelectedSortTo = ListBox1.SelectedIndex ListBox1Sort(SelectedSortFrom, SelectedSortTo) End Sub Private Function ListBox1Sort(ByVal From As Integer, ByVal Too As Integer) If From = -1 Then Exit Function If Too = -1 Then Exit Function Dim A(ListBox1.Items.Count) As String Dim B As Boolean For i As Integer = 0 To ListBox1.Items.Count - 1 A(i) = ListBox1.Items(i) Next For i As Integer = 0 To ListBox1.Items.Count - 1 If i = Too Then ListBox1.Items(i) = A(From) B = True Else ListBox1.Items(i) = A(i - 1) End If Next End Function

  • c言語 プログラミング(初心者)

    解を判定するプログラミングを作成したのですが、a,b,cを0,1,2と入力したときに解に0.00000が出てきて解がおかしくなります。 どなたか詳しい方教えてください。また簡潔にできる点などありましたらご指摘お願いします。 #include <stdio.h> #include <math.h> int main (void) { double a,b,c,d,x1,x2; printf("ax^2+bx+c=0 の係数を入力してください\n"); scanf("%lf %lf %lf",&a,&b,&c ); if(a==0){ if(b==0) { printf("解は存在しません\n"); } else { x1=-c/b; printf("解は %f です\n",x1); } } else { d=b*b-4*a*c; if(d>=0){ x1=(-b+sqrt(d))/(2.0*a); x2=(-b-sqrt(d))/(2.0*a); if(d==0){ printf("解は %f (重解)です\n",x1); } else { printf("解は %f と %f です\n",x1,x2); } } else { printf("実数解は存在しません(虚数解)\n"); } } return 0; }