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

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

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

Re[9]: Form1からForm2を開くときに、pathを引き継ぎたい


(過去ログ 60 を表示中)

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

■34359 / inTopicNo.1)  Form1からForm2を開くときに、pathを引き継ぎたい
  
□投稿者/ キッチン (1回)-(2009/03/27(Fri) 01:01:54)

分類:[C#] 

C# 2008を使っています。WindowsXPです。
Form1からForm2を開くときに、pathを引き継ぎたいと思います。

Form1
string PhotoPath = @"c:\test.jpg";
Form2 photo = new Form2();
photo.ShowDialog();

Form2
public Form2()
{
InitializeComponent();
Photo.Image = Bitmap.FromFile(PhotoPath);
}

のようにしようと考えています。
で、このときに、PhotoPathをForm2に引き継ぐためには、具体的にどのようにしたらよいでしょう?
単純に
Form1
string PhotoPath = @"c:\test.jpg";
Form2 photo = new Form2(PhotoPath);
photo.ShowDialog();

Form2
public Form2(PhotoPath)
{
InitializeComponent();
Photo.Image = Bitmap.FromFile(PhotoPath);
}
としてみたところ、Form2ではPhotoPathが現在のコンテキスト内に存在しないといわれ、Form1では無効な引数が含まれているとエラーが出ています。
よろしくお願いします。

引用返信 編集キー/
■34360 / inTopicNo.2)  Re[1]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ 倉田 有大 (498回)-(2009/03/27(Fri) 01:14:33)
No34359 (キッチン さん) に返信
> C# 2008を使っています。WindowsXPです。
> Form1からForm2を開くときに、pathを引き継ぎたいと思います。
>
> Form1
> string PhotoPath = @"c:\test.jpg";
> Form2 photo = new Form2();
> photo.ShowDialog();
>
> Form2
> public Form2()
> {
> InitializeComponent();
> Photo.Image = Bitmap.FromFile(PhotoPath);
> }
>
> のようにしようと考えています。
> で、このときに、PhotoPathをForm2に引き継ぐためには、具体的にどのようにしたらよいでしょう?
> 単純に
> Form1
> string PhotoPath = @"c:\test.jpg";
> Form2 photo = new Form2(PhotoPath);
> photo.ShowDialog();
>
> Form2
> public Form2(PhotoPath)
> {
> InitializeComponent();
> Photo.Image = Bitmap.FromFile(PhotoPath);
> }
> としてみたところ、Form2ではPhotoPathが現在のコンテキスト内に存在しないといわれ、Form1では無効な引数が含まれているとエラーが出ています。
> よろしくお願いします。
>

フォームのコンストラクタの引数を使うのはやめたほうがいいですよ。後から渡したい変数が増えたとき、また処理を追加しないといけません。

class Form2
{
public string path;
...

Form2 photo = new Form2();
photo.path = PhotoPath;


てか
public Form2(PhotoPath)

public Form2(string PhotoPath)
じゃない?

引用返信 編集キー/
■34361 / inTopicNo.3)  Re[1]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ επιστημη (1853回)-(2009/03/27(Fri) 01:14:48)
επιστημη さんの Web サイト
2009/03/27(Fri) 01:16:23 編集(投稿者)

単純なミスでしょ。

× public Form2(PhotoPath)
○ public Form2(string PhotoPath)

# くぁーモロかぶり orz
引用返信 編集キー/
■34362 / inTopicNo.4)  Re[2]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ 倉田 有大 (499回)-(2009/03/27(Fri) 01:16:43)
かぶった!/( ^o^ )\
引用返信 編集キー/
■34363 / inTopicNo.5)  Re[3]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ キッチン (2回)-(2009/03/27(Fri) 01:57:00)
ありがとうございました。できました。
ところで、フォームのコンストラクタの引数を使うのはやめたほうがいい、ということですが、たしかにおっしゃるように、あとから渡したい変数が増える可能性はあります。
そのようなときには、どのように作っていったらよいのでしょう?

解決済み
引用返信 編集キー/
■34364 / inTopicNo.6)  Re[4]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ επιστημη (1854回)-(2009/03/27(Fri) 02:34:03)
επιστημη さんの Web サイト
> フォームのコンストラクタの引数を使うのはやめたほうがいい

コンストラクトに必要な情報じゃないから
コンストラクタに渡すのは控えろ、くらいの意味じゃないかと。
「あとから渡したい変数が増えたとき困る」は関係ないよに思えます。


> あとから渡したい変数が増える可能性はあります。
> そのようなときには、どのように作っていったらよいのでしょう?

case-by-case.
structなりclassなりで渡したいもんまとめてドカッと渡してもいいんだし。

引用返信 編集キー/
■34365 / inTopicNo.7)  Re[4]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ Jitta on the way (294回)-(2009/03/27(Fri) 09:04:51)
No34363 (キッチン さん) に返信
> ありがとうございました。できました。
> ところで、フォームのコンストラクタの引数を使うのはやめたほうがいい、ということですが、たしかにおっしゃるように、あとから渡したい変数が増える可能性はあります。
> そのようなときには、どのように作っていったらよいのでしょう?
>

今回のケースなら、ShowDialog をオーバーロードしてもいい。
引数をクラスにまとめれば、メソッドのシグニチャを変更する手間は省ける。けど、管理は面倒。

あ、最初のコード、こんな感じで。(とか言いながら、ちょっと自信なし。使わないと忘れるなぁ。)
public Form2(string PhotoPath) : this()
{
Photo.Image = Bitmap.FromFile
(PhotoPath);
}

string ありのコンストラクターを実行する前に、引数なしのコンストラクターを実行する。

ShowDialog をオーバーロードするときも、こんな感じで。
DialogResult ShowDialog(string path)
{
return ShowDialog(path, 追加の引数のデフォルト値);
}

引用返信 編集キー/
■34367 / inTopicNo.8)  Re[5]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ επιστημη (1855回)-(2009/03/27(Fri) 09:57:46)
επιστημη さんの Web サイト
> public Form2(string PhotoPath) : this()
> { ... }
>
> string ありのコンストラクターを実行する前に、引数なしのコンストラクターを実行する。

引数なしのコンストラクタがあるならそうする。
なかったらエラーになるます。

引用返信 編集キー/
■34368 / inTopicNo.9)  Re[6]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ Jitta on the way (295回)-(2009/03/27(Fri) 10:46:23)
No34367 (επιστημη さん) に返信
>>public Form2(string PhotoPath) : this()
>>{ ... }
>>
>>string ありのコンストラクターを実行する前に、引数なしのコンストラクターを実行する。
>
> 引数なしのコンストラクタがあるならそうする。
> なかったらエラーになるます。
>

あ!追加していると勝手に思い込んでいたけど、デフォルト コンストラクターを編集した、とも考えられるか!!
引用返信 編集キー/
■34371 / inTopicNo.10)  Re[7]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ HiJun (123回)-(2009/03/27(Fri) 13:51:59)
2009/03/27(Fri) 13:52:41 編集(投稿者)
2009/03/27(Fri) 13:52:33 編集(投稿者)

Form2にパス用のプロパティを作ってみては?
引用返信 編集キー/
■34372 / inTopicNo.11)  Re[8]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ 囚人 (330回)-(2009/03/27(Fri) 14:35:36)
>フォームのコンストラクタの引数を使うのはやめたほうがいいですよ。

ん〜、すごい疑問。なんででしょ?
必ず渡す必要があるなら、コンストラクタに渡すべきだと思いますけど。


>今回のケースなら、ShowDialog をオーバーロードしてもいい。

これまた何ででしょ?
元の ShowDialog は残るわけで、ややこしくなるでけでは?
引用返信 編集キー/
■34375 / inTopicNo.12)  Re[9]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ なちゃ (258回)-(2009/03/27(Fri) 18:31:23)
フォームのコンストラクタに関しては、デザイナの都合で追加しかできないなどの事情もありますね。
ShowDialogのオーバーロードは私もややこしい気がします。

で結局プロパティみたいな。

引用返信 編集キー/
■34377 / inTopicNo.13)  Re[10]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ キッチン (3回)-(2009/03/27(Fri) 19:56:27)
なるほど。みなさまありがとうございました。
まだまだ初心者なのですが、
・コンストラクタで引数を渡す
・プロパティ
・オーバーロード
などいろいろな手法があることはわかってきました。
オーバーロードは本で読んでもなんのこっちゃとぜんぜんぴんと来ませんでしたが、なるほどこういうときに使うのかと。

解決済み
引用返信 編集キー/
■34382 / inTopicNo.14)  Re[11]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ επιστημη (1856回)-(2009/03/27(Fri) 21:59:26)
επιστημη さんの Web サイト
> ・コンストラクタで引数を渡す
> ・プロパティ
> ・オーバーロード

基本はフツーのメソッド: void Setほげほげ(あれ,これ,それ) じゃないんかなぁ。

引用返信 編集キー/
■34388 / inTopicNo.15)  Re[12]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ nori (58回)-(2009/03/28(Sat) 01:55:52)
>>フォームのコンストラクタの引数を使うのはやめたほうがいいですよ。
>ん〜、すごい疑問。なんででしょ?
>必ず渡す必要があるなら、コンストラクタに渡すべきだと思いますけど。
何が必須なのかオプションなのか分からなくなるので、私も必須なものはコンストラクタに渡すべきだと思います。

>フォームのコンストラクタに関しては、デザイナの都合で追加しかできないなどの事情もありますね。
これはどう言う事でしょうか?
引用返信 編集キー/
■34389 / inTopicNo.16)  Re[13]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ なちゃ (259回)-(2009/03/28(Sat) 02:58:58)
No34388 (nori さん) に返信
> >フォームのコンストラクタに関しては、デザイナの都合で追加しかできないなどの事情もありますね。
> これはどう言う事でしょうか?

デフォルトコンストラクタが消せないのでどうせ必須にはできないって意味です。
まあ、必須にはできないってだけでコンストラクタ追加でもいいんですけどね。

引用返信 編集キー/
■34392 / inTopicNo.17)  Re[14]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ 神酒入 (4回)-(2009/03/28(Sat) 03:45:11)
No34389 (なちゃ さん) に返信
> デフォルトコンストラクタが消せないのでどうせ必須にはできないって意味です。

外からみて必須ならいいわけですよね。
デフォルトコンストラクタをprivateにするとかは?
引用返信 編集キー/
■34393 / inTopicNo.18)  Re[9]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ 倉田 有大 (500回)-(2009/03/28(Sat) 08:14:55)
No34372 (囚人 さん) に返信
> >フォームのコンストラクタの引数を使うのはやめたほうがいいですよ。
>
> ん〜、すごい疑問。なんででしょ?
> 必ず渡す必要があるなら、コンストラクタに渡すべきだと思いますけど。

必ず渡す必要があるなら、コンストラクタのほうが間違いがなさそうですね。
今回、スレ主がプロパティーとかしらなさそうなので、他のやり方も催促してみましたー
引用返信 編集キー/
■34394 / inTopicNo.19)  Re[15]: Form1からForm2を開くときに、pathを引き継ぎたい
□投稿者/ 渋木宏明(ひどり) (1105回)-(2009/03/28(Sat) 08:23:49)
渋木宏明(ひどり) さんの Web サイト
> デフォルトコンストラクタをprivateにするとかは?

デザイナでエラーになったような気がします。
引用返信 編集キー/
■34395 / inTopicNo.20)  Re[16]: Form1からForm2を開くときに、pathを引き継ぎたい
 
□投稿者/ 倉田 有大 (501回)-(2009/03/28(Sat) 08:37:43)
No34394 (渋木宏明(ひどり) さん) に返信
>>デフォルトコンストラクタをprivateにするとかは?
>
> デザイナでエラーになったような気がします。

デフォルトコンストラクタ消せない場合は、必須パラメーターを渡さずにフォームを表示させてしまうコードを書いてしまう可能性がでてくるかな。
私の感覚ですが、今回フォームにパス渡すぐらいなら、コンストラクタをオーバーロードしたくないなあ^^;
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -