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

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

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

Re[8]: Formを閉じたときの処理


(過去ログ 51 を表示中)

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

■27957 / inTopicNo.1)  Formを閉じたときの処理
  
□投稿者/ のろ (17回)-(2008/11/18(Tue) 09:44:21)

分類:[C#] 

VS2005のWindowsアプリでプログラムを作っています。

Form1のDataGridViewから一行取り出し、Form2でその一行の内容を更新、あるいは新たに追加をしています。
Form2を閉じたとき、追加あるいは更新したものを追加して、Form1のDataGridViewの内容を更新したいのですが、どのようにしたらいいのかよく分かりません。。

どなたか知恵を貸してください(><。)
引用返信 編集キー/
■27960 / inTopicNo.2)  Re[1]: Formを閉じたときの処理
□投稿者/ みきぬ (218回)-(2008/11/18(Tue) 10:07:10)
2008/11/18(Tue) 10:11:46 編集(投稿者)

No27957 (のろ さん) に返信
> VS2005のWindowsアプリでプログラムを作っています。
>
> Form1のDataGridViewから一行取り出し、Form2でその一行の内容を更新、あるいは新たに追加をしています。
> Form2を閉じたとき、追加あるいは更新したものを追加して、Form1のDataGridViewの内容を更新したいのですが、どのようにしたらいいのかよく分かりません。。
>
> どなたか知恵を貸してください(><。)

1つ前のスレッド(↓)でもちょっと思ったんですけど、
http://bbs.wankuma.com/index.cgi?mode=al2&namber=27683

そのアプリってデータベースは絡まないんですかね?
いや、Form1 を参照画面、Form2 を登録/更新画面 と考えて、
・Form1 で、データベースの○○テーブルの内容を表示する
・Form2 を開くときに、Form1 で選んだレコードのキー情報を渡す
・Form2 では、もらったキーを使ってレコードを表示する(キーがなければ新規登録)
・Form2 で登録/更新をおこなうことで、データベースの○○テーブルに登録や変更を反映させる
・Form2 を閉じた後、Form1 は自身を再表示する(もう1回データを拾いに行く)
ような感じだと個人的にしっくりきただけなんですが。

もしデータベースが絡まなくても、それに代わるもの(DataTableとか)をどこかに用意して、Form1 や Form2 からはそれを表示/更新していく感じにすれば考えやすいと思うんですが、どでしょ?
引用返信 編集キー/
■27961 / inTopicNo.3)  Re[1]: Formを閉じたときの処理
□投稿者/ .SHO (69回)-(2008/11/18(Tue) 10:08:55)
No27957 (のろ さん) に返信

タイトルから考えて、Formを閉じるタイミングで処理する方法という意味でしたら
OnFormClosingをoverrideしてください。

検討違いだったらごめんなさい。

引用返信 編集キー/
■27969 / inTopicNo.4)  Re[2]: Formを閉じたときの処理
□投稿者/ のろ (18回)-(2008/11/18(Tue) 11:31:27)
No27960 (みきぬ さん) に返信
> そのアプリってデータベースは絡まないんですかね?

DataGridViewのデザイン時にデータベースに接続しないのか、という意味でしょうか。
それとも、SqlConnectionの話でしょうか。

> いや、Form1 を参照画面、Form2 を登録/更新画面 と考えて、
> ・Form1 で、データベースの○○テーブルの内容を表示する
> ・Form2 を開くときに、Form1 で選んだレコードのキー情報を渡す
> ・Form2 では、もらったキーを使ってレコードを表示する(キーがなければ新規登録)
> ・Form2 で登録/更新をおこなうことで、データベースの○○テーブルに登録や変更を反映させる
> ・Form2 を閉じた後、Form1 は自身を再表示する(もう1回データを拾いに行く)
> ような感じだと個人的にしっくりきただけなんですが。
>
> もしデータベースが絡まなくても、それに代わるもの(DataTableとか)をどこかに用意して、Form1 や Form2 からはそれを表示/更新していく感じにすれば考えやすいと思うんですが、どでしょ?

ひとつ前のスレッドでも書いたのですが、Form1にDataTableを用意してDataGridViewにデータを入れているのですが、Form2からForm1のDataGridViewっていじれるのでしょうか。。
素人丸出しですいません(:_;)
引用返信 編集キー/
■27971 / inTopicNo.5)  Re[3]: Formを閉じたときの処理
□投稿者/ まんごーぷりん (21回)-(2008/11/18(Tue) 12:03:25)
まんごーぷりん さんの Web サイト
データバインディングしているかどうかで、若干方法が変わってくるかと・・・
それとデータソースのオブジェクトは何になるかとか。
引用返信 編集キー/
■27974 / inTopicNo.6)  Re[2]: Formを閉じたときの処理
□投稿者/ のろ (19回)-(2008/11/18(Tue) 13:38:09)
No27961 (.SHO さん) に返信
> ■No27957 (のろ さん) に返信
>
> タイトルから考えて、Formを閉じるタイミングで処理する方法という意味でしたら
> OnFormClosingをoverrideしてください。
>
> 検討違いだったらごめんなさい。
>

やりたいことは、まさしくその通りです!
でも、Form1とForm2のクラスは、
public partial class Form1(あるいは2) : System.Windows.Forms.Form
{
}
としているのですが、それでもoverrideは利用できるのでしょうか。。
引用返信 編集キー/
■27977 / inTopicNo.7)  Re[3]: Formを閉じたときの処理
□投稿者/ みきぬ (220回)-(2008/11/18(Tue) 13:56:26)
No27969 (のろ さん) に返信
> ■No27960 (みきぬ さん) に返信
>>そのアプリってデータベースは絡まないんですかね?
>
> DataGridViewのデザイン時にデータベースに接続しないのか、という意味でしょうか。
> それとも、SqlConnectionの話でしょうか。
>
実装に何を使っているのかというよりかは、のろさんが作っているアプリケーションの目的がわからなかったんですよ。
画面で編集して、それを画面に表示して、そこでおしまい。アプリケーションを終了したら、すべてなくなってしまうもののように見えたので。

> ひとつ前のスレッドでも書いたのですが、Form1にDataTableを用意してDataGridViewにデータを入れているのですが、Form2からForm1のDataGridViewっていじれるのでしょうか。。
> 素人丸出しですいません(:_;)

いじれるかいじれないかでいったら「いじれる」ですが、本当にそれが正しいのかどうかは別問題です。
のろさんが作っているアプリケーションに、「子画面から親画面のデータグリッドを操作できる」機能が必要なようには思えません。
「子画面は●●を更新する。親画面は●●を参照して表示する」という役割分担のほうがいいんじゃないかなーと思ったわけです。
引用返信 編集キー/
■27985 / inTopicNo.8)  Re[3]: Formを閉じたときの処理
□投稿者/ .SHO (75回)-(2008/11/18(Tue) 14:46:35)
No27974 (のろ さん) に返信

> でも、Form1とForm2のクラスは、
> public partial class Form1(あるいは2) : System.Windows.Forms.Form
> {
> }
> としているのですが、それでもoverrideは利用できるのでしょうか。。

のろさんの求めているアプリケーションの仕様は想像しかねるので
とりあえずご質問の回答だけ書きますが、利用できます。

引用返信 編集キー/
■28055 / inTopicNo.9)  Re[4]: Formを閉じたときの処理
□投稿者/ のろ (20回)-(2008/11/19(Wed) 11:43:58)
2008/11/19(Wed) 11:46:33 編集(投稿者)

@Form1の画面からForm2の画面を開くとき、引数に自分自身を入れる。

private void 詳細ボタン_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this);
f2.ShowDialog();
}

Aclassの中でprivate Form1 f1;と宣言しておき、Form2が呼び出されたとき、Form1を引数に入れる。

public Form2(Form1 form1)
{
InitializeComponent();
f1 = form1;
}

BForm2を閉じるとき、Form1でDataGridViewに値をセットしている関数を呼び出す。

これで解決しました^^

解決済み
引用返信 編集キー/
■28057 / inTopicNo.10)  Re[5]: Formを閉じたときの処理
□投稿者/ やじゅ (785回)-(2008/11/19(Wed) 12:52:39)
やじゅ さんの Web サイト
No28055 (のろ さん) に返信
> Aclassの中でprivate Form1 f1;と宣言しておき、Form2が呼び出されたとき、Form1を引数に入れる。
>
> public Form2(Form1 form1)
> {
> InitializeComponent();
> f1 = form1;
> }
>

こんなことしなくても、f2.ShowDialog(this); とすれば、OwnerプロパティでForm1が参照できます。
          
解決済み
引用返信 編集キー/
■28134 / inTopicNo.11)  Re[6]: Formを閉じたときの処理
□投稿者/ じゃんぬねっと (564回)-(2008/11/20(Thu) 13:44:23)
じゃんぬねっと さんの Web サイト
No28055 (のろ さん) に返信
> @Form1の画面からForm2の画面を開くとき、引数に自分自身を入れる。
> Aclassの中でprivate Form1 f1;と宣言しておき、Form2が呼び出されたとき、Form1を引数に入れる。
> BForm2を閉じるとき、Form1でDataGridViewに値をセットしている関数を呼び出す。

Form1 から Form2 の ShowDialog メソッドを使って、ShowDialog メソッドの戻り値が DialogResult.OK であれば Form1 を更新するという流れが明解だと思うのですが。
Form1 にある情報が必要ならそれは Form2 を開く時に渡せば良いのであって、Form1 の参照など持ちまわる必要はありません。
Form2 の結果セットを Form1 が受け取るというようにして、呼び出し元が常に親になるようにした方が良いです。

# それと Owner は情報を得るために設定するものではないと思います。
# Owner から取得するくらいならフツーにプライベート メンバで厳密な型を設定した方がマシです。
解決済み
引用返信 編集キー/
■28183 / inTopicNo.12)  Re[7]: Formを閉じたときの処理
□投稿者/ まんごーぷりん (37回)-(2008/11/20(Thu) 18:30:37)
まんごーぷりん さんの Web サイト
No28134 (じゃんぬねっと さん) に返信
> ■No28055 (のろ さん) に返信
>>@Form1の画面からForm2の画面を開くとき、引数に自分自身を入れる。
>>Aclassの中でprivate Form1 f1;と宣言しておき、Form2が呼び出されたとき、Form1を引数に入れる。
>>BForm2を閉じるとき、Form1でDataGridViewに値をセットしている関数を呼び出す。
>
> Form1 から Form2 の ShowDialog メソッドを使って、ShowDialog メソッドの戻り値が DialogResult.OK であれば Form1 を更新するという流れが明解だと思うのですが。

明解というか王道というか。
そして、王道ではない方法は、邪道という・・・

共通のデータソースを使って更新したデータの処理がわからないのだとばかり思っていました。
引用返信 編集キー/
■28190 / inTopicNo.13)  Re[8]: Formを閉じたときの処理
□投稿者/ じゃんぬねっと (565回)-(2008/11/20(Thu) 19:28:51)
じゃんぬねっと さんの Web サイト
No28183 (まんごーぷりん さん) に返信
> 明解というか王道というか。
> そして、王道ではない方法は、邪道という・・・

おっと、厳しい意見ですね。

> 共通のデータソースを使って更新したデータの処理がわからないのだとばかり思っていました。

最初の情報だとそう想像してしまうのは不自然ではないとは思います。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -