C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: アプリケーション設定とチェックボックスについて


(過去ログ 171 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■98365 / inTopicNo.1)  アプリケーション設定とチェックボックスについて
  
□投稿者/ アン (3回)-(2021/11/06(Sat) 21:28:56)

分類:[.NET 全般] 

2021/11/10(Wed) 16:01:28 編集(投稿者)


<pre><pre>Vistual studio 2022を使用しています。

アプリケーション設定
名前 種類  スコープ  値
ID String ユーザー   0000
IDDATA1 String ユーザー
IDDATA2 String ユーザー
IDDATA3 String ユーザー
IDDATA4 String ユーザー
IDDATA5 String ユーザー
--------------------------------------------------

書き直ししました所、一ヶ所だけおかしくなりました。


作り直したコード


登録・変更フォーム

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Settings.CheckBox1.Checked = My.Settings.IDDATA1 Then
My.Settings.IDDATA1 = TextBox1.Text
End If
If Settings.CheckBox1.Checked = My.Settings.IDDATA2 Then
My.Settings.IDDATA2 = TextBox2.Text
End If
If Settings.CheckBox1.Checked = My.Settings.IDDATA3 Then
My.Settings.IDDATA3 = TextBox3.Text
End If
If Settings.CheckBox1.Checked = My.Settings.IDDATA4 Then
My.Settings.IDDATA4 = TextBox4.Text
End If
If Settings.CheckBox1.Checked = My.Settings.IDDATA5 Then
My.Settings.IDDATA5 = TextBox5.Text
End If
MsgBox("登録しました。")
End Sub
-------------------------------------------------------------------

If Settings.CheckBox1.Checked = My.Settings.IDDATA1 Then
My.Settings.IDDATA1 = TextBox1.Text
End If
....
なおした部分ですがテキストボックス2で入力及び、再度起動後
登録した数字が無事出来たんですが・・・

テキストボックス1で2回目やったら消えました。
そうするとテキストボックス2でも消えてました。
デバックして数回確認しました。

設定フォームが問題なのがわかりません。

設定フォーム
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
'チェックボックスオン、オフ設定
If CheckBox1.Checked = True Then
Button1.Enabled = True
My.Settings.IDDATA1 = CheckBox1.Checked
My.Settings.IDDATA2 = CheckBox1.Checked
My.Settings.IDDATA3 = CheckBox1.Checked
My.Settings.IDDATA4 = CheckBox1.Checked
My.Settings.IDDATA5 = CheckBox1.Checked
My.Settings.Save()
Else
If CheckBox1.Checked = False Then

Button1.Enabled = True

My.Settings.Save()
End If
End If
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'チェックボックスオン、オフ設定

If Button1.Enabled = True Then
Button1.Enabled = False
My.Settings.IDDATA1 = CheckBox1.Checked
My.Settings.IDDATA2 = CheckBox1.Checked
My.Settings.IDDATA3 = CheckBox1.Checked
My.Settings.IDDATA4 = CheckBox1.Checked
My.Settings.IDDATA5 = CheckBox1.Checked

MsgBox("適用しました。")

End If

End Sub
---------------------------------------------------------

1
アプリを起動後、登録画面で数字を入れます。
2
再度起動後、設定ボタン→テキストボックス1→登録した数字→設定画面
となるようにプログラム作りました。
3
2でもう一回、数字を入れると登録した数字が消えている状態です。


引用返信 編集キー/
■98366 / inTopicNo.2)  Re[1]: アプリケーション設定とチェックボックスについて
□投稿者/ アン (4回)-(2021/11/06(Sat) 21:51:36)
2021/11/10(Wed) 14:32:10 編集(投稿者)

削除
引用返信 編集キー/
■98367 / inTopicNo.3)  Re[2]: アプリケーション設定とチェックボックスについて
□投稿者/ アン (5回)-(2021/11/06(Sat) 22:01:11)
2021/11/10(Wed) 14:32:38 編集(投稿者)

削除
引用返信 編集キー/
■98370 / inTopicNo.4)  Re[3]: アプリケーション設定とチェックボックスについて
□投稿者/ くま (27回)-(2021/11/07(Sun) 22:57:12)
2021/11/07(Sun) 22:59:44 編集(投稿者)

アンさん、ごめんなさい。
ここから先は厳しい話になると思いますので謝っておきます。
気に入らなければ読み飛ばしてください。














まずアンさんはプログラムに関して初心者という感触がコードからつたわってきます。

まずこの状態だと回答がつけられません。
理由として「1か所直しても他でバグが発生する」事がわかっているからです。

まずデバッグ作業として「ステップイン実行」で、どの処理がどの時点で通るか調べてみましょう。
https://atmarkit.itmedia.co.jp/fdotnet/chushin/vsdebug_01/vsdebug_01_02.html

次にデータ型
「Settings.CheckBox1.Checked」などの「Checked」プロパティはBoolean型
■Checked
https://hironimo.com/prog/vbnet/checkbox/
■Boolean型
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/data-types/boolean-data-type

あちこちのコードで混ざっているんだけどデータ型の暗黙の型変換は使わないようにしましょう。

ちなみに設定の型はString型なのでBoolean型を代入すると"True"か"False"に変換されます(自動型変換・暗黙の型変換)
Boolean型にString型の"True"はTrue
Boolean型にString型の"False"はFalse
Boolean型にString型の"0"はFalse
Boolean型にString型の"1"はTrue(0以外)
Boolean型にString型の""はエラー
■暗黙の型変換と明示的な型変換
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/data-types/implicit-and-explicit-conversionsBoolean


所々にある
My.Settings.ID2 = Settings.CheckBox1.Checked '← 次の処理でMy.Settings.ID2が書き変わっているので必要ない
My.Settings.ID2 = TextBox2.Text
...

所々にある
If TextBox1.Text = My.Settings.ID1 Then
'処理A
End If
If TextBox1.Text = My.Settings.ID2 Then
'処理A
End If
...

多分
If TextBox1.Text = My.Settings.ID1 _
or TextBox1.Text = My.Settings.ID2 _
...
or TextBox1.Text = My.Settings.ID5 Then
'処理A
End If
だと思う。

あとTextBox1_KeyPressの制御もIDの桁数が足りない場合や貼り付けの場合などはどうするの?

設定画面の基本だけれども画面が表示(Load)の際、My.Settingsから読み込んで
「OK」で設定内容を保存して閉じる
「キャンセル」で設定内容を保存しないで閉じる
が基本で項目毎に変更するなら各ボタンの制御(Enabled)も必要かと思います

またコントロールも「CheckBox1」「TextBox1」「Button1」とかではなく
「txtID1」「bID1」など分かりやすく名前を変更しましょう。

My.Settings.Reload()はMy.Settingsの値を変更してMy.Settings.Save()の前の状態
(変更後保存前)を変更前にする処理です。
https://dobon.net/vb/dotnet/programing/mysettings.html

等々いろんなところが気になって「これ!」という答えが出せないんです。
せっかく書いたコードですが、テキストファイルにコードをコピーして保存して
一度まっさらな状態で書き直した方が良いかと思います。


引用返信 編集キー/
■98384 / inTopicNo.5)  Re[4]: アプリケーション設定とチェックボックスについて
□投稿者/ アン (6回)-(2021/11/10(Wed) 15:54:31)
2021/11/10(Wed) 16:03:37 編集(投稿者)

くまさん、回答ありがとうございます。

> 所々にある
> My.Settings.ID2 = Settings.CheckBox1.Checked '← 次の処理でMy.Settings.ID2が書き変わっているので必要ない
> My.Settings.ID2 = TextBox2.Text
> ...
>
> 所々にある
> If TextBox1.Text = My.Settings.ID1 Then
> '処理A
> End If
> If TextBox1.Text = My.Settings.ID2 Then
> '処理A
> End If
> ...
>
> 多分
> If TextBox1.Text = My.Settings.ID1 _
> or TextBox1.Text = My.Settings.ID2 _
> ...
> or TextBox1.Text = My.Settings.ID5 Then
> '処理A
> End If
> だと思う。

自己解決しました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -