- ベストアンサー
RadioButtonの挙動がおかしい?ApplicationSettingsの設定方法を教えてください
- VB2010、Win7 64bitの環境でプログラムを開発している際、RadioButtonの復元問題に直面しました。
- ApplicationSettings→PropertyBinding→Checkedでラジオボタンの状態を復元できることを確認しましたが、実際には2回クリックしないと選択されないバグが発生しました。
- この問題に対する解決方法をご存知の方はいらっしゃいますか?どうかお知恵をお貸しください。
- みんなの回答 (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
その他の回答 (2)
- samtomsan
- ベストアンサー率55% (1060/1897)
興味だけで回答しては申し訳ないので、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 これだけのプログラムだと二回クリックする必要はありませんでした。
お礼
ご回答有難うございます。 申し訳ありません。『プロジェクトのプロパティで 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)
実際にそのプログラミングを行なったことはありませんが、方法に興味がありまして調べてみました。 回答になるかどうかは判りませんが。 下記の二番目が参考になるかもしれません(変な日本語に訳されていますが判ると思います)。 http://dobon.net/vb/dotnet/programing/mysettings.html http://ja.w3support.net/index.php?db=so&id=937281
お礼
ご回答有難うございます。 ご紹介頂きましたサイトは二つとも既に確認済みで、特に2番目のサイトは、私と同事象についてのQ&Aのような気はするのですが、結局何が書かれているのか理解出来ませんでした。 引き続きご回答下さる方をお待ちします。
お礼
ご丁寧に解説頂きまして有難う御座います。 想定通りの動きをするようになりました。 私の場合、下記のサイトを参考にさせて頂いておりましたが、 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 が表示されるという次第です。 この度は、本当に助かりました。 今作成中のプログラムも、まだまだ他にも嵌まってる箇所が多数あります。 機会が御座いましたら、またご指導のほど宜しくお願い致します。