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

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

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

Re[2]: WindowsFormsApplicationでReload


(過去ログ 137 を表示中)

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

■80907 / inTopicNo.1)  WindowsFormsApplicationでReload
  
□投稿者/ Pepper (16回)-(2016/08/18(Thu) 11:04:44)

分類:[C#] 

WindowsFormsApplicationでForm1のbutton1をクリックすると、Form1が閉じてForm2に遷移して、
Form2のbutton1をクリックすると、Form2が閉じてForm1がReloadする様にしたく、
下記のような実装をしました。

Form1側
public partial class Form1 : Form
{
  private void button1_Click(object sender, EventArgs e)
{
Hide();
using (var form2 = new Form2())
{
form2.ShowDialog(this);
}
Show();
}
}

Form2側
public partial class Form2 : Form
{
  private void button1_Click(object sender, EventArgs e)
{
// 再起動後のForm1を生成
Form1 frm = new Form1();
// 自身を閉じる
this.Close();
// 再起動のForm1を起動する
frm.Show();
}
}


Form1のbutton1をクリックするには問題ないのですが、
Form2のbutton1をクリックすると、Form2が閉じてForm1が2重起動してしまいます。


WindowsFormsApplicationで、Form1が2重起動せず且つ、Form1をReloadするにはどうすればいいですか?


よろしくお願いします





引用返信 編集キー/
■80908 / inTopicNo.2)  Re[1]: WindowsFormsApplicationでReload
□投稿者/ Hongliang (450回)-(2016/08/18(Thu) 11:10:43)
リロードというのが何か特別な意味を持っているのか判断がつきませんが。
単にForm2が閉じられた後でForm1を再表示したい、というのであれば、Form2側では特に何もする必要もなく、Form1の現在の記述のみで問題ありません。
それとも、それまでForm1で色々編集していたりするのをリセットする意味も込めて、まっさらなForm1を新たに表示したいという要求でしょうか?
引用返信 編集キー/
■80910 / inTopicNo.3)  Re[2]: WindowsFormsApplicationでReload
□投稿者/ Pepper (17回)-(2016/08/18(Thu) 13:05:19)

> リロードというのが何か特別な意味を持っているのか判断がつきませんが。
> 単にForm2が閉じられた後でForm1を再表示したい、というのであれば、Form2側では特に何もする必要もなく、Form1の現在の記述のみで問題ありません。
> それとも、それまでForm1で色々編集していたりするのをリセットする意味も込めて、まっさらなForm1を新たに表示したいという要求でしょうか?

from2を編集した後、編集した内容をForm1に反映させたいから、Form2が閉じた後、Form1を再読み込みしたいのですが、説明不足で申し訳ございません

引用返信 編集キー/
■80911 / inTopicNo.4)  Re[3]: WindowsFormsApplicationでReload
□投稿者/ 魔界の仮面弁士 (829回)-(2016/08/18(Thu) 13:17:17)
No80910 (Pepper さん) に返信
>>リロードというのが何か特別な意味を持っているのか判断がつきませんが。
>>単にForm2が閉じられた後でForm1を再表示したい、というのであれば、Form2側では特に何もする必要もなく、Form1の現在の記述のみで問題ありません。
>>それとも、それまでForm1で色々編集していたりするのをリセットする意味も込めて、まっさらなForm1を新たに表示したいという要求でしょうか?
> from2を編集した後、編集した内容をForm1に反映させたいから、Form2が閉じた後、Form1を再読み込みしたいのですが、説明不足で申し訳ございません

「リロード」することによって、どういう状態になることを期待しているのかが
分からなかったのですが、処理イメージ的にはこういうことでしょうか。


public partial class Form1 : Form
{
 private void ReloadComponents()
 {
  // ここに初期化処理を記述
 }

 private void Form1_Locd(object sender, EventArgs e)
 {
  ReloadComponents();
 }

 private void button1_Click(object sender, EventArgs e)
 {
  Hide();
  using (var form2 = new Form2())
  {
   form2.ShowDialog(this);
   if(form2.DialogResult != DialogResult.Cancel)
   {
    ReloadComponents();
   }
  }
  Show();
 }
}
引用返信 編集キー/
■80912 / inTopicNo.5)  Re[4]: WindowsFormsApplicationでReload
□投稿者/ なちゃ (130回)-(2016/08/18(Thu) 14:03:45)
魔界の方が書かれているように、おそらくLoadイベントから再実行したい、という感じなのでしょうね、ありがちですし。

フォームを作り直すのは以外とやっかいなので、可能なら魔界の方が書かれているようなやり方が良いと思います。
まあ、VBならアプリケーションフレームワークを使えばフォームの入れ替えも案外簡単にできたかも知れませんが。
引用返信 編集キー/
■80913 / inTopicNo.6)  Re[1]: WindowsFormsApplicationでReload
□投稿者/ 真田昌幸 (40回)-(2016/08/19(Fri) 09:24:03)
No80907 (Pepper さん) に返信
> WindowsFormsApplicationでForm1のbutton1をクリックすると、Form1が閉じてForm2に遷移して、
> Form2のbutton1をクリックすると、Form2が閉じてForm1がReloadする様にしたく、
> 下記のような実装をしました。
>
> Form1側
> public partial class Form1 : Form
> {
>   private void button1_Click(object sender, EventArgs e)
> {
> Hide();
> using (var form2 = new Form2())
> {
> form2.ShowDialog(this);
> }
> Show();
> }
> }
>
> Form2側
> public partial class Form2 : Form
> {
>   private void button1_Click(object sender, EventArgs e)
> {
> // 再起動後のForm1を生成
> Form1 frm = new Form1();
> // 自身を閉じる
> this.Close();
> // 再起動のForm1を起動する
> frm.Show();
> }
> }
>
>
> Form1のbutton1をクリックするには問題ないのですが、
> Form2のbutton1をクリックすると、Form2が閉じてForm1が2重起動してしまいます。
>
>
> WindowsFormsApplicationで、Form1が2重起動せず且つ、Form1をReloadするにはどうすればいいですか?

ただのバグコードにしか見えませんが。
Form1でHideしていて、Form2でForm1のインスタンスを別に作成してShow。
2重起動して当たり前です。

Hede、Close、Unloadそれぞれ別の意味です。
(逆のShow、Open、Loadもしかり)

まずそこから整理してください。

単純に遷移したいだけなら
> form2.ShowDialog(this);

の時点で、モーダル表示しているので、
Form1をHideする必要ないです。

Form1に戻りたければ、Form2を閉じればいいだけです。

システム上form2から先に遷移するのがあり得るのですか?
それならShowDialogを使っていること自体が不適切。


引用返信 編集キー/
■80914 / inTopicNo.7)  Re[3]: WindowsFormsApplicationでReload
□投稿者/ 真田昌幸 (41回)-(2016/08/19(Fri) 09:29:18)
> from2を編集した後、編集した内容をForm1に反映させたいから、Form2が閉じた後、Form1を再読み込みしたいのですが、説明不足で申し訳ございません

Form1のLoadイベントに処理をべた書きして、その処理を呼び出したくて Form1のロードを発生させようとしているなら、
それは処理設計が悪いです。
ロジックの見直しをしてください。
引用返信 編集キー/
■80917 / inTopicNo.8)  Re[2]: WindowsFormsApplicationでReload
□投稿者/ Pepper (18回)-(2016/08/19(Fri) 21:15:33)
Hongliang さん、魔界の仮面弁士 さん、なちゃ さん、 真田昌幸 さん に返信

ありがとうございました。
解決しました。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -