MQL4 CRadioButton CRadioGroup ラジオボタン

ユーザーの選択を、ラジオボタン CRadioButton と CRadioGroup を使って取得する方法をサンプルコード付きで紹介します

[PR]


CRadioButton と CRadioGroup の違い

ラジオボタンは「複数の選択肢から1つだけ選ぶ」ための部品です。チェックボックスと違い、1つを選ぶと他は自動で外れます。

項目 CRadioButton CRadioGroup
インクルード Controls\RadioButton.mqh Controls\RadioGroup.mqh
選択状態の取得 State() Value()
取得できる値 選択中は1、未選択は0 AddItem() で決めた値(例:1・2・4)
クリックで解除 できない できない(別の項目を選ぶと切り替わる)
向いている用途 CRadioGroup の部品(単体で使うことはまれ) 複数の選択肢から1つだけ選ばせる

ポイント

  • 単体の CRadioButton は、一度選ぶと再クリックしても未選択に戻りません
  • 選択肢が2つ以上あるなら、最初から CRadioGroup を使うのがかんたんです
  • 解除できない理由など細かい仕様は、記事後半の「補足」で説明しています

CRadioButton 変更を受け取る

まずは、ラジオボタンを1つだけ置いた基本のダイアログを作ります。大まかな流れは次の3ステップです。

  • RadioButton.mqh のインクルード
    • MQL4\Include\Controls\RadioButton.mqh ヘッダーファイルをインクルードします
  • カスタムクラスを定義
    • CAppDialog を継承したクラス(ここでは CTestPanel、名前は自由)を定義して、下地になるパネルを Create
    • ラジオボタンを作る CreateRadioButton() を定義
    • イベントハンドラーでCRadioButtonの変更を受け取り、State() の値を Comment() でチャートに表示
  • オブジェクトの作成
    • CTestPanel のオブジェクト(インスタンス)TPanel を作り、OnInit() で Create して Run()

起動直後は「RadioButton = 0」、ラジオボタンをクリックすると「RadioButton = 1」と表示されます。

ただし、もう一度クリックしても 0 には戻りません。単体のラジオボタンは「選ぶ」ことはできても「外す」ことはできない仕組みです。

1つの項目を ON/OFF で切り替えたいだけなら、チェックボックス(CCheckBox)のほうが向いています。

CRadioGroup

CRadioGroup を使うと、複数の CRadioButton をまとめて1つのグループとして扱えます。RadioGroup.mqh の中で RadioButton.mqh がインクルードされているので、インクルードは RadioGroup.mqh だけで済みます。

どのボタンが選ばれたかは Value() で取得します。AddItem() で項目を追加するときに、ビット演算子の左シフト(1<<i)で 1・2・4 の値を割り当てておき、Value() の戻り値でどのボタンが選ばれたかを判定して Comment() に表示しています。

下の画像では RadioButton_2 が選択されています。

最初から特定の項目を選んだ状態にしておきたいときは、AddItem() の後に tRadioGroup.Value(1); のように、選びたい項目の値を指定します(MQL5 公式リファレンスのサンプルも同じ方法です)。

補足:単体のラジオボタンが解除できない理由

CRadioButton の選択状態は State() で取得できます。RadioButton.mqh には次のように定義されていて、内部のボタン(m_button)が押されているかどうかをそのまま返しています。

一方、クリックされたときの処理(OnClickButton)は、ボタンが押されていなければオンにするだけで、オフに戻す処理がありません。ヘッダーファイルのコメントにも「ラジオボタンはクリックではオフにできない(オンにしかできない)」という趣旨の説明があります。

そのため MQL5 の公式リファレンスでも、CRadioButton は単体で使うものではなく、CRadioGroup の項目を作るための部品と説明されています。

また、CRadioGroup の Value() の戻り値は long 型です。int で受け取るとコンパイル時に警告が出ることがあるので、サンプルでは long で受け取っています。

参考:MQL5 リファレンス CRadioButton / MQL5 リファレンス CRadioGroup

シェアする

  • このエントリーをはてなブックマークに追加

フォローする