RadioButtonの挙動がおかしい?ApplicationSettingsの設定方法を教えてください

このQ&Aのポイント
  • VB2010、Win7 64bitの環境でプログラムを開発している際、RadioButtonの復元問題に直面しました。
  • ApplicationSettings→PropertyBinding→Checkedでラジオボタンの状態を復元できることを確認しましたが、実際には2回クリックしないと選択されないバグが発生しました。
  • この問題に対する解決方法をご存知の方はいらっしゃいますか?どうかお知恵をお貸しください。
回答を見る
  • ベストアンサー

ApplicationSettingsについて

使用言語:VB2010、OS:Win7 64bit の環境でプログラミングしています。 RadioButtonを3つ使用していて、プログラム終了時に選択されていた状態を、再起動時に復元させたいと考えています。 全てのRadioButtonにて、ApplicationSettings→PropertyBinding→Checked→(それぞれ別名で作成) を行ったところ、確かに各ボタンの状態を記憶し、再起動時に復元出来るようにはなりましたが、何故かRadioButtonの挙動がおかしくなってしまいました。 1回クリックで全てが未選択状態となり、もう1回クリックしてやっと選択状態になるという風に、必ず2回クリックしないといけなくなってまったのです。 ApplicationSettingsの設定の仕方がマズいのでしょうか? 解決方法をご存じの方がいらっしゃいましたら、お知恵をお貸し頂けたらと思います。 宜しくお願い致します。

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

  • ベストアンサー
  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.3

> 『プロジェクトのプロパティで MyRadioButtonState を Integer で定義して』というところが具体的にどうすれば良いか教えて頂けますでしょうか。 プロジェクト -> WindowsApplication1のプロパティ -> 設定 と進み、名前に「MyRadioButtonState」、型に「Integer」、スコープは「ユーザー」、値は「0」(何でも構わない、プログラムを実行すれば変わりますから)を設定します。 Form1.vb(Public Class Form1の場合)に先のプログラムを書き込みます。 Public Class Form1  先のプログラム End Class これだけです(RadioButtonは三つ造ってありますが)。 > 因みに私のアプリケーション設定は 名前 型     スコープ 値 rbt1 Boolean ユーザ  True rbt2 Boolean ユーザ  False rbt3 Boolean ユーザ  False と定義しています。 「アプリケーション設定」というのが判りませんが、MyRadioButtonState と同様に プロジェクト -> WindowsApplication1のプロパティ -> 設定 と進みこれらを個々に設定してあるでしょうか。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If (My.Settings.rbt1 = True) Then RadioButton1.Checked = True RadioButton2.Checked = False RadioButton3.Checked = False ElseIf (My.Settings.rbt2 = True) Then RadioButton1.Checked = False RadioButton2.Checked = True RadioButton3.Checked = False ElseIf (My.Settings.rbt3 = True) Then RadioButton1.Checked = False RadioButton2.Checked = False RadioButton3.Checked = True End If End Sub Private Sub Form1_FormClosing(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.FormClosingEventArgs) _ Handles MyBase.FormClosing If RadioButton1.Checked = True Then My.Settings.rbt1 = True My.Settings.rbt2 = False My.Settings.rbt3 = False ElseIf RadioButton2.Checked = True Then My.Settings.rbt1 = False My.Settings.rbt2 = True My.Settings.rbt3 = False ElseIf RadioButton3.Checked = True Then My.Settings.rbt1 = False My.Settings.rbt2 = False My.Settings.rbt3 = True End If My.Settings.Save() End Sub

Pokachu
質問者

お礼

ご丁寧に解説頂きまして有難う御座います。 想定通りの動きをするようになりました。 私の場合、下記のサイトを参考にさせて頂いておりましたが、 RdioButtonとCheckBoxでは使い方が違ったということですね。 http://natchan-develop.seesaa.net/article/24824552.html 念の為、私の誤った設定手順を記載しておきます。 1. Radiobutton を3つ作成 2. RadioButton1のプロパティにて   (ApplicationSettings) ⇒ (PropatyBinding) ⇒ Checked   ⇒ 新規作成 ⇒ Nameを『rbt1』に設定 3. RadioButton2、3 も同様にNameを変えて設定 4. RadioButton1 だけ Checkedプロパティの初期値をTrueに設定 すると、プロジェクト ⇒ WindowsApplication1のプロパティ ⇒ 設定 で、  名前 型    スコープ 値  rbt1 Boolean  ユーザ  True  rbt2 Boolean  ユーザ  False  rbt3 Boolean  ユーザ  False が表示されるという次第です。 この度は、本当に助かりました。 今作成中のプログラムも、まだまだ他にも嵌まってる箇所が多数あります。 機会が御座いましたら、またご指導のほど宜しくお願い致します。

その他の回答 (2)

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.2

興味だけで回答しては申し訳ないので、VB2008とVB2010で簡単なプログラムを作って確かめて見ましたが、ご質問の現象は発生しませんでした。 プロジェクトのプロパティで MyRadioButtonState を Integer で定義しておいて、ラジオボタンを3つ作りました。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If (My.Settings.MyRadioButtonState = 1) Then RadioButton1.Checked = True ElseIf (My.Settings.MyRadioButtonState = 2) Then RadioButton2.Checked = True ElseIf (My.Settings.MyRadioButtonState = 3) Then RadioButton3.Checked = True End If End Sub Private Sub Form1_FormClosing(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.FormClosingEventArgs) _ Handles MyBase.FormClosing If RadioButton1.Checked = True Then My.Settings.MyRadioButtonState = 1 ElseIf RadioButton2.Checked = True Then My.Settings.MyRadioButtonState = 2 ElseIf RadioButton3.Checked = True Then My.Settings.MyRadioButtonState = 3 End If My.Settings.Save() End Sub これだけのプログラムだと二回クリックする必要はありませんでした。

Pokachu
質問者

お礼

ご回答有難うございます。 申し訳ありません。『プロジェクトのプロパティで MyRadioButtonState を Integer で定義して』というところが具体的にどうすれば良いか教えて頂けますでしょうか。 取り敢えずご提示頂いたソースをそのまま貼り付けると『'MyRadioButtonState'は'WindowsApplication1.My.MySettings'のメンバーではありません」とエラーになります。 エラーの修正オプションで『'WindowsApplication1.My.MySettings'に'MyRadioButtonState'のプロパティ スタブを生成』や『'WindowsApplication1.My.MySettings'に'MyRadioButtonState'のフィールドを生成』を選択するとエラーは消えますが、期待通りの動きはしてくれません。 『Public MyRadioButtonState As Integer』を書き加えてもエラーが消えません。 因みに私のアプリケーション設定は 名前 型     スコープ 値 rbt1 Boolean ユーザ  True rbt2 Boolean ユーザ  False rbt3 Boolean ユーザ  False と定義しています。 基本的な部分が理解出来てなくて申し訳ありませんが、ご教示頂けますと幸いです。

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.1

実際にそのプログラミングを行なったことはありませんが、方法に興味がありまして調べてみました。 回答になるかどうかは判りませんが。 下記の二番目が参考になるかもしれません(変な日本語に訳されていますが判ると思います)。 http://dobon.net/vb/dotnet/programing/mysettings.html http://ja.w3support.net/index.php?db=so&id=937281

Pokachu
質問者

お礼

ご回答有難うございます。 ご紹介頂きましたサイトは二つとも既に確認済みで、特に2番目のサイトは、私と同事象についてのQ&Aのような気はするのですが、結局何が書かれているのか理解出来ませんでした。 引き続きご回答下さる方をお待ちします。

関連するQ&A

  • RadioButtonについて

    C#でプログラミングをしています。 RadioButtonをいくつか使ってるんですが、ユーザーが選択するときに何個か選択できるようにしたいです。今は、一つをクリックして、もう一つをクリックすると片方が消えてしまう状態です。どうすれば両方選択できるようになりますか? 初心者なので全然分かりません。教えて下さい。

  • ラジオボタンのチェック

    VB2010で作成してるんですけど。 ラジオボタンをフォームに入れてデバッグすると、ラジオボタンがチェックされて表示されてしまいます。。 Form_Loadでラジオボタンのチェックを外すコードは書いたんですけど・・。 RadioButton1.Checked = False という風に。 でもやはりチェックがついています。。 どうしたらチェックを外した状態で表示できるでしょうか?

  • Ctrlを押していないのに常に押してる挙動をする、Escボタンがウィンドウズマークキーになっている

    文字入力をしていたら突然文字入力ができなくなりました、いろいろ触ってるうちに、デスクトップのアイコン(複数)をクリックした時にCtrlを押している状態と同じ挙動をするとわかっりました。 メモ帳(内容あり)を起動して範囲選択をしてXキー単体を押したら切り取り、Vで貼り付けもされました。 再起動しても常にCtrlをおしているかのような挙動がつづいて何も文字が入力できなくて困ってます。 なんとか元にもどせないでしょうか? ちなみに、ログオフ、別ユーザー、再起動、システム復元では元にもどりませんでした。

  • 処理をまとめたい。

    VB2008を使用しています。 現在、VBのTextBoxにExel内のデータを表示するプログラムを作成しています。Exel内には10のシートがあり、それぞれのシート内に、20列×50行のデータ(文字)が入っています。 VBには1~10(グループ化)及び11~30の(グループ化)RadioButtonとTxstBox50個を配置し、1~10のRadioButtonでシート名を、11~30のRadioButtonで列を選択し、各TxstBoxに50行のデータを取得したいと考えています。 現在、下記のコードを作成したのですが、この方法ではシート数10×列数20=200もの似たようなコードを作成しなければなりません。もっとスマートな方法はないでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' excelを定義 Dim excel As New Microsoft.Office.Interop.Excel.Application ' test.xlsを取得 Dim book As Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open("C:\test.xls") ' 1枚目のワークシートを取得 Dim Item(1) As Microsoft.Office.Interop.Excel.Worksheet Item(1) = CType(book.Worksheets.Item(1), Microsoft.Office.Interop.Excel.Worksheet) ・ ・ Item(20) = CType(book.Worksheets.Item(1), Microsoft.Office.Interop.Excel.Worksheet) Dim COLUMN As String If RadioButton1.Checked = True AndAlso RadioButton13.Checked Then COLUMN = "A" TextBox1.Text = Item(1).Range(COLUMN & "1").Value ・ ・ TextBox50.Text = Item(1).Range(COLUMN & "50").Value Else If RadioButton10.Checked = True AndAlso RadioButton30.Checked Then COLUMN = "T" TextBox1.Text = Item(10).Range(COLUMN & "1").Value ・ ・ TextBox50.Text = Item(10).Range(COLUMN & "50").Value Else End If

  • C#でラジオボタンを設定に記録する方法

    すみません、どなたかご存知のかた教えてください。 C#でグループボックスの上に20個くらいのラジオボタンが並んでいて、どれかをチェックした時設定として保存し、プログラムを再起動した時チェック状態を復元したいのですが、どのようにすれば良いでしょうか? Properties.Settings.Defaultで型をSystem.Windows.Forms.RadioButtonにして(RadioButton)senderを記憶するようにしてみましたが(プログラムが分かって無いからですが)だめでした。 現在はProperties.Settings.Defaultの型をstringにして、次のような形で動かしていますが、なんとかシンプル(スマート)にしたいのです。 private void Form1_Load(object sender, EventArgs e) { switch (Properties.Settings.Default.SelectedProgram) { case "Func1": radioButtonFunc1.Checked = true; break; case "Func2": radioButtonFunc2.Checked = true; break; case "Func3": radioButtonFunc3.Checked = true; break; default: break; } } //各ラジオボタン共通 private void radioButtonSelect_Click(object sender, EventArgs e) { string RadioButtonText = null; RadioButton _RadioButton = (RadioButton)sender; if (_RadioButton.Checked == true) { RadioButtonText = _RadioButton.Text; Properties.Settings.Default.SelectedProgram = RadioButtonText; switch (RadioButtonText) { case "Func1": textBox1.Text = "a"; break; case "Func2": textBox1.Text = "b"; break; case "Func3": textBox1.Text = "c"; break; default: break; } } } //プログラム開始ボタン private void buttonStart_Click(object sender, EventArgs e) { string RadioButtonText = null; foreach (RadioButton prgText in groupBox1.Controls) { if (prgText.Checked) { RadioButtonText = prgText.Text; break; } } switch (RadioButtonText) { case "Func1": Func1(); break; case "Func2": Func2(); break; case "Func3": Func3(); break; default: break; } } private void Func1() { } private void Func2() { } private void Func3() { }

  • 休止状態から起動すると画面が真っ黒のままになる・・・

    休止状態から起動すると画面が真っ黒のままになる・・・ いつも寝るとき休止状態にしているのですが今日、起動してみると 画面が真っ黒のままでうまく起動しませんでした。 クリックやキーを押してみるとエラー音?がきちんとなるんですが 画面は真っ黒のままです。 いままでスリープ時から起動の時にだけこのようなことが起こってたんですが 休止状態では初めてなりました。 そしてしょうが無いので強制シャットダウンをして起動すると 「前回の状態には復元できませんでした」 →もう一回復元してみる →休止状態で保存した状態を削除し、普通に起動する みたいなことがあったので→もう一回復元してみる を選択したらまた同じようなことが起こりました・・・ そしてもう一回強制シャットダウンをして →休止状態で保存した状態を削除し、普通に起動する を選択すると 英語が出てきました 拙い文章ですが解決方法を教えていただけると幸いです よろしくお願いします ちなみにOSは Windows Vista Home Premium SP2です

  • VB、前回の続き→http://okwave.jp/qa/q59129

    VB、前回の続き→http://okwave.jp/qa/q5912905.html 前回は詳しく教えていただきありがとうございました。 皆様に教えて頂いたコードを自分なりに色々と試しつつ おかげでラジオボタンから1から9の数字を選んでボタンを押すと選んだ数字がボタンに表示される→もう一度押すと表示された数字も消えて、選んでいたラジオボタンもセレクトされていない状態に戻る事ができるためのコードが組めました(前回質問したときは3つでしたが、今回9つのラジオボタンでやっています。) ボタン1の場合 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ElseIf Button1.Text <> "" Then Label1.Text = "0" Button1.Text = "" RadioButton1.Enabled = True RadioButton2.Enabled = True RadioButton3.Enabled = True RadioButton4.Enabled = True RadioButton5.Enabled = True RadioButton6.Enabled = True RadioButton7.Enabled = True RadioButton8.Enabled = True RadioButton9.Enabled = True どのラジオボタンを選んでボタン1にどんな数字が表示されても、もう一度クリックすると数字は消えてラジオボタンは選んでいない状態、そして横のラベルの和は0になっています。 9つのボタン全てにこのようにコードを入れていったのですが問題が起こってしまいました。 なぜか、1のラジオボタンを選んだ時は何も起こらないのですが、2から9までの数字のラジオボタンを選んだ際、自動で”1”とボタンに表示されてしまいます(例えば2のラジオボタンを選択すると、押していないのにButton2に”1”と表示される。) これはどのように解決すればいいのでしょうか?毎回丁寧なご回答を下さっている方、本当に本当にありがとうございます。この場をかりて改めてお礼を言わせていただきます。

  • DBの値をチェックボックスに反映させたい

    DBに登録してあるデータをもとに、該当するチェックボックスに、画面表示時にチェックを入れるプログラムを作成しています。 DBからのデータは $info という配列の中の9番目に 男性であれば「0」,女性であれば「1」という数字が入っており、 $info[9]に実際に値が入っているところまでは確認できました。 これをもとに以下のようにコーディングを行ったのですが、ラジオボタンのみ空欄のままになっています。(他のテキストデータはうまく表示されています。) 原因と、解決策がわかるかたがいらっしゃいましたらご教授ください。 ※プログラミングは初心者です。 よろしくお願いたします。 ---------------- <?php switch($info[9]){ case 0: $checked0 = 'checked'; break; case 1: $checked1 = 'checked'; } ?> ■body内 <dt>性別:</dt> <input type="hidden" name="seibetsu" value="$info[9]"> <input name="radiobutton" type="radio" value=0 "$checked0"/ >男性 <input name="radiobutton" type="radio" value=1 "$checked1"/>女性 --------------------------

    • ベストアンサー
    • PHP
  • RadioButtonについて教えてください

    仕事で visual basic を使うことになった、 一日目の初心者です。 現在、window のレイアウトをVisual studio のVBで行っております。 RadioButtonについて教えていただきたいのですが、 例えば複数の項目の中から1つの項目を選択させる為には、 RadioButtonを必要数 配置してグループとして関連付けを行わないといけないと思うのですが、どのようにすればよいのでしょうか? もしかしてGroupBox上に配置しないといけないのでしょうか? GroupBoxを使用しないと不可能な場合は、実行時 GroupBoxを見せたくない時はGroupBoxを不可視に設定するのでしょうか? 申し訳ありませんが、教えて頂けないでしょうか? よろしくお願いします。

  • VB2008 Form間の計算について

    VB勉強中のものです。 次のようにプログラムを作成したいですので よろしくお願いします。 要望: 1 From2のTextbox1 or Textbox2に"2001/05/05"ような書式で日付を入力 2 RadioButton1かRadioButton2の選択して 3 Form1の「DateTimePicker」を利用して、日数の差を計算し、 Form2の label3に結果を表示させる 例: From2のTextbox1 = 2001/01/01 Form1の「DateTimePicker」 = 2002/01/01 RadioButton1を選択したら、 Label3内に " 誕生日から生まれて365日となりました" という結果が出れば、問題がないです。 ------------ Form 1 --------------------- Public Class Form1 Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click 'labelをクリックして、form2を開く Dim frmTmp As New Form2 frmTmp.ShowDialog() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intdate As Integer intdate = DateDiff(DateInterval.Day, DateTimePicker1.Value, Now) Label1.Text = "誕生日から生まれて" & intdate & "日となりました" End Sub End Class -------------------------------------------- -------------Form 2 ------------------------ Public Class Form2 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged If RadioButton1.Checked = True Then Label3.Text = "*******わからない部分*******" End If End Sub End Class ----------------------------------------------------- 以上

専門家に質問してみよう