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

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

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

アプリケーションを初期状態に戻したいボタンの作成

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

■89462 / inTopicNo.1)  アプリケーションを初期状態に戻したいボタンの作成
  
□投稿者/ Dulu(初心者) (1回)-(2018/11/30(Fri) 08:53:57)

分類:[C#] 

開発環境はVisualStudio2017、使用言語はC#です。

アプリケーションを初期状態(初回起動時状態)にするボタン(規定値に戻すボタン)を
アプリケーションにつけたいと思っています。
具体的にどのようにすればいいですか?
考えたのはlocalに保存されているUser.Config(自動的に作成されるやつ)を
削除するという方法なのですが、そういうプログラミングはあるのでしょうか?
引用返信 編集キー/
■89463 / inTopicNo.2)  Re[1]: アプリケーションを初期状態に戻したいボタンの作成
□投稿者/ Jitta (430回)-(2018/11/30(Fri) 09:15:54)
そのアプリがウェブブラウザーだとしたら、
初期状態とはどのような状態ですか?
履歴やクッキーが消えれば良い
お気に入りなどの記録も消したい
ダウンロードしたファイルも消したい

引用返信 編集キー/
■89464 / inTopicNo.3)  Re[1]: アプリケーションを初期状態に戻したいボタンの作成
□投稿者/ 魔界の仮面弁士 (1959回)-(2018/11/30(Fri) 09:39:41)
No89462 (Dulu(初心者) さん) に返信
> (規定値に戻すボタン)
規定値 → 既定値 ですね。default value の意味であれば。


> アプリケーションを初期状態(初回起動時状態)にするボタン(規定値に戻すボタン)を
> アプリケーションにつけたいと思っています。

何をもって初期状態とみなすのかは、アプリケーションの要件定義次第かと。

たとえば、exe と同じフォルダにある *.bmp を *.png 形式に一括変換するようなアプリなら
初期状態とは変換前の *.bmp 群を復元する処理なのか…という話になってしまいます。

設定情報を保持するタイプのアプリだとしても、その設定情報を
.config に持つのか、レジストリなのか、データベースなのか、
あるいはクラウド上に保持するのか、といった作りの違いもありますし。


> 考えたのはlocalに保存されているUser.Config(自動的に作成されるやつ)を
> 削除するという方法なのですが、そういうプログラミングはあるのでしょうか?

ここでいう user.config というのは、
 string userConfigFilePath = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
の場所に保持されるファイルのことでしょうか。

デザイナの「設定」や "ApplictionSettings" で保持される情報だとしたら、
 Properties.Settings.Default.Reset();
が既定値へのリセットで
 Properties.Settings.Default.Save();
が現在の状態の保存ですね。
https://dobon.net/vb/dotnet/programing/mysettings.html


Reset メソッドを呼び出した場合にロードされる値は、
App.config ファイルから生成された "アプリ名.exe.config" が使われます。

ただし アプリ名.exe.config が存在していなかった場合には、
開発時に "Settings.Designer.cs" 内に埋め込まれていた値が利用されます。
引用返信 編集キー/
■89466 / inTopicNo.4)  Re[2]: アプリケーションを初期状態に戻したいボタンの作成
□投稿者/ Dulu(初心者) (2回)-(2018/11/30(Fri) 11:41:49)
> 規定値 → 既定値 ですね。default value の意味であれば。

既定値です。間違えました><

> 何をもって初期状態とみなすのかは、アプリケーションの要件定義次第かと。

初期状態とは「本当に初めてPCで」アプリケーションを立ち上げた状態を指します。
2回目からはlocalに保存されているuser.configの設定が読み込まれます。


> 設定情報を保持するタイプのアプリだとしても、その設定情報を
> .config に持つのか、レジストリなのか、データベースなのか、
> あるいはクラウド上に保持するのか、といった作りの違いもありますし。

user.configに持っています。

> ここでいう user.config というのは、
>  string userConfigFilePath = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
> の場所に保持されるファイルのことでしょうか。

そうです。

> デザイナの「設定」や "ApplictionSettings" で保持される情報だとしたら、
>  Properties.Settings.Default.Reset();
> が既定値へのリセットで
>  Properties.Settings.Default.Save();
> が現在の状態の保存ですね。
> https://dobon.net/vb/dotnet/programing/mysettings.html

Properties.Settings.Default.Reset();
コレで既定値へのリセットが出来ないんです。。。ですから質問してみました。
引用返信 編集キー/
■89467 / inTopicNo.5)  Re[3]: アプリケーションを初期状態に戻したいボタンの作成
□投稿者/ とっちゃん (555回)-(2018/11/30(Fri) 11:44:12)
No89466 (Dulu(初心者) さん) に返信
> Properties.Settings.Default.Reset();
> コレで既定値へのリセットが出来ないんです。。。ですから質問してみました。

保持してる値をリセットすることと、その値を利用しているところの状態を戻すことは異なります。

リセット後、その値を参照するところで再度値を読み取り、値に沿って設定しなおすという起動時処理をやり直していますか?

引用返信 編集キー/
■89468 / inTopicNo.6)  Re[2]: アプリケーションを初期状態に戻したいボタンの作成
□投稿者/ Dulu (5回)-(2018/11/30(Fri) 12:19:30)
リセットが通用しないのは何となく調べててわかっています。
引用返信 編集キー/
■89497 / inTopicNo.7)  Re[3]: アプリケーションを初期状態に戻したいボタンの作成
□投稿者/ 魔界の仮面弁士 (1963回)-(2018/11/30(Fri) 18:04:15)
No89468 (Dulu さん) に返信
> リセットが通用しないのは何となく調べててわかっています。

「何となく」の一行だけで答えられても、会話にならないです…。

こちらとしても、実際のコードを見ているわけでは無いので、
そちらの状況が分かるよう、手順を追って状況を説明していただけないでしょうか。



> ■No89466 (Dulu(初心者) さん) に返信
> 初期状態とは「本当に初めてPCで」アプリケーションを立ち上げた状態を指します。
> 2回目からはlocalに保存されているuser.configの設定が読み込まれます。

そもそも初回はどうやって読み込ませているのでしょうか?

たとえば WinForms のデザイナーでコントロールのプロパティにマップしていた場合は、
DataBindings によって、Reset 時に自動リロードされるようになっています。



以下実験手順。

(1) 新規に "Windows フォーム アプリケーション" プロジェクトを作成。

(2) Form1 のデザイン画面が開くので、button1 と textBox1 を貼っておく。

(3) デザイン画面で textBox1 を選択した状態で、プロパティ一覧の最上部にある
 "(ApplicationSettings)"-"(PropertyBinding)" 欄の [...] をクリック。

(4) 「textBox1 のアプリケーション設定」画面が開くので、
 "Text" を選択して、「なし ▽」のドロップダウンを押す。

(5) 「新しいアプリケーション設定」画面が開くので、
 "DefaultValue" に「あいうえお」
 "Name" に "textBox1Text"
 "Scope" に "User
 と指定してダイアログを閉じる。

(6) button1 の Click イベントに
 『Properties.Settings.Default.Reset();』
 と記述。

(7) Form1 の FormClosed イベントに
 『Properties.Settings.Default.Save();』
 と記述。


<検証手順>
コンパイルして実行すると、初期状態で「あいうえお」と表示されているはずです。
テキストの内容を「かきくけこ」に書き換えて、フォームを閉じます。

再度フォームを起動すると、テキストが「かきくけこ」の状態で起動します。

ここで button1 をクリックすると、テキストが「あいうえお」に戻ります。
しかしコードとしては、Reset() を呼び出しただけです。
引用返信 編集キー/
■89507 / inTopicNo.8)  Re[4]: アプリケーションを初期状態に戻したいボタンの作成
□投稿者/ Dulu (6回)-(2018/11/30(Fri) 21:09:16)
わかりずらくてスミマセン。どうしても文章力が無く伝わりにくくてスミマセン。。。。

> そもそも初回はどうやって読み込ませているのでしょうか?

そもそも設定はすべて、「プロジェクト」>「〇〇○○のプロパティ」>「設定」を
使用しています。
初回はここのデータを読み込ませてるんじゃないんですか?
引用返信 編集キー/
■89508 / inTopicNo.9)  Re[5]: アプリケーションを初期状態に戻したいボタンの作成
□投稿者/ 魔界の仮面弁士 (1965回)-(2018/11/30(Fri) 23:38:58)
No89507 (Dulu さん) に返信
>>> リセットが通用しないのは何となく調べててわかっています。
>>
>> 「何となく」の一行だけで答えられても、会話にならないです…。
>> そちらの状況が分かるよう、手順を追って状況を説明していただけないでしょうか。
>
> どうしても文章力が無く伝わりにくくてスミマセン。。。。

不足しているのは「文章力」ではなく、
状況を説明するための「文章」そのものかと…。


伝わりやすさについてはさておき、まずはとにかく
その場にいない第三者に分かるよう、現在の状況を「説明」して頂けると助かります。


たとえば先の私の実験コードに button2 を追加して、
 private void button2_Click(object sender, EventArgs e)
 {
  MessageBox.Show(Properties.Settings.Default.textBox1Text);
  Properties.Settings.Default.Reset();
  MessageBox.Show(Properties.Settings.Default.textBox1Text);
 }
としてみた場合、どうなりますでしょうか?

自分の認識では、最初のメッセージは textBox1.Text と同じ内容が表示され、
2 つ目のメッセージは、初期値である「あいうえお」が表示されると思っています。

それとも、
>>> リセットが通用しないのは何となく調べててわかっています。
と書かれていたということは、上記の実験コードすら
期待動作しない状況であるという事でしょうか。


いずれにしても「何となく調べた」ではなく、具体的にどういう調査を行ったことで
通用しないと判断するに至ったのか、もう少し説明が欲しいところです。
引用返信 編集キー/
■89509 / inTopicNo.10)  Re[5]: アプリケーションを初期状態に戻したいボタンの作成
□投稿者/ 魔界の仮面弁士 (1966回)-(2018/12/01(Sat) 00:15:10)
No89507 (Dulu さん) に返信
> そもそも設定はすべて、「プロジェクト」>「〇〇○○のプロパティ」>「設定」を
> 使用しています。

No89497 の実験手順にそって組んでみた場合も、その設定画面に
"textBox1Text" というユーザースコープ値が登録されませんでしたか?



> 初回はここのデータを読み込ませてるんじゃないんですか?

Properties.Settings.Default が行うのは、「.config ファイルを読み書きすること」だけと思ってください。

その読み込まれた Properties.Settings.Default を「どこ」で利用しているのかは、
設定値を作成したご本人に聞いてみてください。(掲示板を見ている我々には判断できません)
作成者が不在 or 失念している場合には、ソースコードをご自身で解析して見つけて頂くしかないでしょう。


No89467 でも指摘されていましたが、「保持してる値」をリセットしたからといって
「その値を利用しているところ」の状態が変化するかどうかは、そもそも別の話です。

.Reset() メソッドの役目は、現在の Properties.Settings.Default が持つ値を
当初の App.config 相当に戻すところまでです。Reset したとしても、それによって
.config ファイルが削除されたり書き換わったりするわけではありませんし(それは .Save の役目)、
その設定値を利用していた箇所の状態が変化するというものでもありません。



一方、先の私の No89497 の手順には、
  // 現在のテキストの値を 設定値に反映
  Properties.Settings.Default.textBox1Text = textBox1.Text;
であるとか
  // 現在の設定値を textBox1と label に表示
  textBox1.Text = Properties.Settings.Default.textBox1Text;
  label.Text = Properties.Settings.Default.textBox1Text;
などといった読み書きのコードが一切記述されていなかったのにも関わらず、
それでも設定値が textBox と連動するようになっていたことを確認頂けたかと思います。

それはデザイン時に、PropertyBinding で関連付け設定をしておいたからです。
デザイン画面では textBox1 の Text プロパティに、バインド設定済みのアイコン表示が付与されていますし、
Form1.designer.cs 内には、データバインドのためのコードが自動生成されていることを確認できるでしょう。


この自動連係機構は、「設定」の働きではなく、バインド機構の働きによるものなので、
.config ファイルや「プロジェクト」>「〇〇○○のプロパティ」>「設定」を
眺めているだけではわからない事です。


もちろん、設定値を造っただけで、プロパティにバインドされていない設定値については、
このような連携は行われません。その場合は No89467 でも指摘されていたように、
>>> リセット後、その値を参照するところで再度値を読み取り、値に沿って設定しなおす
という処理を、御自身で用意せねばならないでしょうね。
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ