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

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

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

Re[9]: 指定したデータに新たに得たデータを強制的に保存したい


(過去ログ 43 を表示中)

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

■22522 / inTopicNo.1)  指定したデータに新たに得たデータを強制的に保存したい
  
□投稿者/ 初心者なハム (15回)-(2008/07/25(Fri) 01:04:08)

分類:[C#] 

 皆様,こんばんわ.前回,わんくまの皆様方に色々とお世話になったものです.
 あの時は,皆様方に色々と有益なアドバイスを賜り,誠にありがとうございました.

 さて,この度,再び,わんくまの皆様にアドバイスを頂きたく,掲示板を利用しております.
大変申し訳ございませんが,どうかご教授いただければ幸いです.


 この度,聞きたいことは,「指定したデータに新たに得たデータを強制的に保存したい」といことです.
例えば,デスクトップ上に画像データ 「名古屋.jpg」 というデータを用意しておきます.次に,プログラムで
解析した画像データを保存する場合に,強制的に 「名古屋.jpg」 に上書きされるようにしたいのです.
つまり,データを保存するとき,名前の入力と保存場所を求める画面が出ることなく,指定した画像データに
上書きされることをやりたいのです.

今のところ,pictureBox1を使い,

private void ToolStripMenultem3_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image.Save(saveFileDialog1.FileName);

}
}

と,書き,上述で書いているような,名前の入力と保存場所を求める画面が出てくる状態です.
 どうしたら,「指定したデータに新たに得たデータを強制的に保存」することができるでしょうか.
 皆様,ご教授お願い致します.



引用返信 編集キー/
■22523 / inTopicNo.2)  Re[1]: 指定したデータに新たに得たデータを強制的に保存したい
□投稿者/ ま (84回)-(2008/07/25(Fri) 01:30:39)
"最後に指定された名前" を取っておけばいいんじゃないでしょか?




引用返信 編集キー/
■22524 / inTopicNo.3)  Re[2]: 指定したデータに新たに得たデータを強制的に保存したい
□投稿者/ 紅の豚118 (4回)-(2008/07/25(Fri) 01:47:37)
先に対象ファイルの存在チェックをしてしまい、あれば削除してから保存とかどうでしょう?
引用返信 編集キー/
■22527 / inTopicNo.4)  Re[3]: 指定したデータに新たに得たデータを強制的に保存したい
□投稿者/ オガシン (29回)-(2008/07/25(Fri) 09:43:54)
>>if (saveFileDialog1.ShowDialog() == DialogResult.OK)
ここで出ているのであれば、SaveFileDialogをインスタンスのOverwritePromptプロパティを
いじれば回避できると思います。

>>pictureBox1.Image.Save(saveFileDialog1.FileName);
ここででていたら、紅の豚118さんが書かれている内容の操作が必要になるかと思います。
引用返信 編集キー/
■22550 / inTopicNo.5)  Re[4]: 指定したデータに新たに得たデータを強制的に保存したい
□投稿者/ PATIO (95回)-(2008/07/25(Fri) 15:37:27)
保存する為には、保存先のパス名が必要になりますよね。
結局、このパス名をどのようにして得るのかと言うだけの問題になると思います。

初心者なハムさんが書かれている例では、パス名を得る為にユーザーに
入力を求めています。ですが、これをユーザーに問合せることなく得ようとするなら
全く別の方法でパス名を得る必要があります。

で、そもそも、初心者なハムさんはどのようにしてパス名をプログラムに
引き渡すつもりなんでしょう?
そこがハッキリしないと先に話が進みません。

例えば、デスクトップ上の「名古屋.jpg」は未来永劫変わらない名前ですか?
もしそうならプログラム内に定数として定義することで解決すると思います。
ファイル名をユーザーの指定した物にしたいならその為の仕掛けが必要ですね。
ユーザーが指定した物をどこかに保存しておかないとプログラムが終了するたびに
入力するハメになります。
また、ユーザーにどうやって指定してもらいますか?
画面上にメニューかボタンを付けてそこから設定用のダイアログでも出しますか?
それとも保存しておく為のファイルに直接入力してもらいますか?

実際にどうしたいのかをきちんと決めないと話が先に進まないと思いますよ。

引用返信 編集キー/
■22558 / inTopicNo.6)  Re[5]: 指定したデータに新たに得たデータを強制的に保存したい
□投稿者/ 初心者なハム (16回)-(2008/07/25(Fri) 16:38:02)
No22527 (ま さん) に返信
>"最後に指定された名前" を取っておけばいいんじゃないでしょか?
 ご返答ありがとうございます.あの,お聞きしたいのですが
 
        >"最後に指定された名前"

とは,つまりどのことなのでしょうか.
 私,まだ初心者で良く分からないところがありまして,どうかご容赦下さい.


No22527 (紅の豚118 さん) に返信
>先に対象ファイルの存在チェックをしてしまい、あれば削除してから保存とかどうでしょう?
 ご返答ありがとうございます.
 データをあらかじめ用意しておき,解析結果を指定した画像データに保存し,別の所でその画像データを指定して
 開こうとしております.つまり,画像データを使うとき,ずっと指定しておきたいため,用意した画像データはずっと残しておきたいです.
保存,開くともに1つの画像データを共有するような形となります.ちなみに,開くほうはできたのですが,保存のほうがうまくいきません.


No22527 (オガシン さん) に返信
 ご返答ありがとうございます.
> >>if (saveFileDialog1.ShowDialog() == DialogResult.OK)
> ここで出ているのであれば、SaveFileDialogをインスタンスのOverwritePromptプロパティを
> いじれば回避できると思います。
 つまり,OverwritePromptプロパティをTrueにするか,Falseにするかということでしょうか.
現在,Trueにしております.


No22550 (PATIO さん) に返信
 ご返答ありがとうございます.
> 保存する為には、保存先のパス名が必要になりますよね。
> 結局、このパス名をどのようにして得るのかと言うだけの問題になると思います。
 はい,おっしゃるとおりです.

> 初心者なハムさんが書かれている例では、パス名を得る為にユーザーに
> 入力を求めています。ですが、これをユーザーに問合せることなく得ようとするなら
> 全く別の方法でパス名を得る必要があります。
> で、そもそも、初心者なハムさんはどのようにしてパス名をプログラムに
> 引き渡すつもりなんでしょう?
> そこがハッキリしないと先に話が進みません。
 おっしゃるとおりです.その大変申しわけないのですが,どのようにしてパス名をプログラムに
引き渡す方法が分かっておりません.なので,今のところ仮ですが,パス名を得る為にユーザーに入力を求める方法で
保存を行っております.

> 例えば、デスクトップ上の「名古屋.jpg」は未来永劫変わらない名前ですか?
 「名古屋.jpg」は,未来永劫に変えません.


> また、ユーザーにどうやって指定してもらいますか?
 そもそも,ユーザーが保存での名前,場所の指定ができず,あるボタンを押すと強制的に指定された画像データに
保存されるようにして,次の段階に移る様にするつもりです.


 皆様にご迷惑をおかけして大変申し訳ありません.どうかご教授の程,お願い致します.
引用返信 編集キー/
■22559 / inTopicNo.7)  Re[6]: 指定したデータに新たに得たデータを強制的に保存したい
□投稿者/ bad14mg (21回)-(2008/07/25(Fri) 17:11:41)
2008/07/25(Fri) 17:30:10 編集(投稿者)
No22558 (初心者なハム さん) に返信
>>初心者なハムさんが書かれている例では、パス名を得る為にユーザーに
>>入力を求めています。ですが、これをユーザーに問合せることなく得ようとするなら
>>全く別の方法でパス名を得る必要があります。
>>で、そもそも、初心者なハムさんはどのようにしてパス名をプログラムに
>>引き渡すつもりなんでしょう?
>>そこがハッキリしないと先に話が進みません。
>  おっしゃるとおりです.その大変申しわけないのですが,どのようにしてパス名をプログラムに
> 引き渡す方法が分かっておりません.なので,今のところ仮ですが,パス名を得る為にユーザーに入力を求める方法で
> 保存を行っております.
> 

ユーザ毎(ExeをインストールしたPC毎)に保存先、ファイル名を変更する必要があるのであれば
設定ファイルを用意して記述しておいて、プログラム起動時に設定ファイルを読み込み、読み込んだ
保存先、ファイル名を利用する。

ユーザ毎(ExeをインストールしたPC毎)に保存先、ファイル名を変更する必要がないのであれば
あまりお勧めしませんがプログラム中に定数で保持する。

保存の1回目のみダイアログを表示する必要があるのであれば、メンバ変数を用意して
メンバ変数が空白の場合、ダイアログを表示。
2回目以降はメンバ変数を利用する。
 こんな感じ
 private string path = string.empty;

 private void ToolStripMenultem3_Click(object sender, EventArgs e)
 {
     if (path == string.empty)
     {
         if (saveFileDialog1.ShowDialog() == DialogResult.OK)
         {
             path = saveFileDialog1.FileName;
         } else {
             return;
         }
     }
     pictureBox1.Image.Save(path);
 }

方法としては他にもあると思いますが、とりあえずこんな感じ。

引用返信 編集キー/
■22562 / inTopicNo.8)  Re[7]: 指定したデータに新たに得たデータを強制的に保存したい
□投稿者/ 初心者なハム (17回)-(2008/07/25(Fri) 18:04:57)
No22559 (bad14mg さん) に返信
> 2008/07/25(Fri) 17:30:10 編集(投稿者)
 ご返答ありがとうございます.プログラムを示して下さるなど,色々として頂き,感謝,感謝です.

あの,先ほどまで色々といじっていた結果

  private void button1_Click(object sender, EventArgs e)
{

pictureBox1.Image.Save("C:\\・・・・・\\明石.jpg", System.Drawing.Imaging.ImageFormat.Bmp);

pictureBox1.Image.Dispose();

}

で,なんとかできました.ただ,例えば保存できるボタンを用意した場合,1回押すだけなら正常に行くのですが
2回目以降,もしくは連打(通常ありえない行動)した場合,エラー(例外のトラブルシューティング )がでます.
 この時,なぜエラーが出るのかが分りません.どうか,ご教授願います.





引用返信 編集キー/
■22563 / inTopicNo.9)  Re[8]: 指定したデータに新たに得たデータを強制的に保存したい
□投稿者/ bad14mg (22回)-(2008/07/25(Fri) 18:13:10)
No22562 (初心者なハム さん) に返信
> で,なんとかできました.ただ,例えば保存できるボタンを用意した場合,1回押すだけなら正常に行くのですが
> 2回目以降,もしくは連打(通常ありえない行動)した場合,エラー(例外のトラブルシューティング )がでます.
>  この時,なぜエラーが出るのかが分りません.どうか,ご教授願います.

どのようなエラーが出るのか示して頂けないと誰も判断できないと思いますよ。

『pictureBox1.Image.Dispose();』をコメントにした場合どうなりますか。
引用返信 編集キー/
■22684 / inTopicNo.10)  Re[9]: 指定したデータに新たに得たデータを強制的に保存したい
□投稿者/ 初心者なハム (18回)-(2008/07/29(Tue) 17:37:13)
No22563 (bad14mg さん) に返信
ご返答ありがとうございます.それと,レスポンスが遅くなり大変申し訳ありませんでした.


> どのようなエラーが出るのか示して頂けないと誰も判断できないと思いますよ。
 ご指摘ありがとうございます.確かにおっしゃるとおりです.どういう風に相談内容を
書けばいいのか分からず,ご指摘を頂けることは大変ありがたいです.とても勉強になります.

 さて,エラーについてなのですが,例外のトラブルシューティングに関することで

「この例外は、メソッドに指定された引数のいずれかが無効である場合にスローされます。」

 ちなみに,このエラーが出るのはセーブボタンを2回以上押した場合に出ます.


> 『pictureBox1.Image.Dispose();』をコメントにした場合どうなりますか。
 ご指摘通りに行うと,うまいくいきました.結局のところプログラムコードを


  private void button1_Click(object sender, EventArgs e)
{

pictureBox1.Image.Save("C:\\・・・・・\\福岡.jpg", System.Drawing.Imaging.ImageFormat.Bmp);

}


に,修正しました.やはり,『pictureBox1.Image.Dispose();』は余計であったようです,
 有益なご教授,誠にありがとうございます.



■コメントを頂いた皆様  に返信
 皆様のおかげで,やっと解決することができました.これも一重に皆様のおかげです.
ま さん,紅の豚118 さん,オガシン さん, PATIO さん,bad14mg さん
大変お世話になりました.ありがとうございます.
 特に,プログラムコードの例などを示してくださったり,色々と対応して下さった bad14mg さんにはとても感謝しております.
誠にありがとうございます.

 皆様に感謝しつつ,失礼さしていただきます.
 どうもありがとうございました.

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -