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

わんくま同盟

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

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


■90070 / )  Re[2]: ユーザーコントロールの使い方
□投稿者/ ルパン (24回)-(2019/02/04(Mon) 11:25:36)
No90069 (魔界の仮面弁士 さん) に返信
ありがとうございます。

削除部分は以下のように変更しました。

>ucTiem が Diposed となったときに、lblTime がまだ Disposed 状態でないことは
>保証できているのでしょうか。
保証できるようにするにはどうすればよいのでしょうか?

フォームでは FormClose に入れていたのですが
ユーザーコントロールではこれに該当するものがわからなかったので
ネットで調べたら 「UserControl の後処理は Dispose で行う」とあったので、
ユーザーコントロールのコンストラクタに
this.Disposed += UcMakeAbilityTime_Disposed;
を追加し Dispose のイベントに Properties への保存処理を入れました。

現状以下のようになっています。

frmMain.cs              ucTime.cs
┌──────┬─────────┐  ┌─────────┐
│┌────┐│         │  │┌──┐┌───┐│
││btnTime ││         │  ││lbl ││btn  ││
│└────┘│         │  ││Time││Close ││
│      │         │  │└──┘└───┘│
│pnlMain   │pnlSub      │  │UserControl    │
└──────┴─────────┘  └─────────┘

≡ frMain.cs ≡
private void Button_Click(object sender, EventArgs e)
{
 SelectButton((Control)sender);
}

private void SelectButton(Control SelectButton)
{
 while (pnlSub.Controls.Count > 0){
  pnlSub.Controls.Remove(pnlSub.Controls[0]);
  pnlSub.Controls[0].Dispose();
 }
 if (sender== btnTime) AddUserControl(new ucTime());
}

private void AddUserControl(Control cnt)
{
 cnt.Dock = DockStyle.Fill;
 pnlSub.Controls.Add(cnt);
}

≡ ucTime.cs ≡
public ucTime()
{
 InitializeComponent();
 this.Disposed += UcTime_Disposed;
}

private void UcMakeAbilityTime_Disposed(object sender, EventArgs e)
{
 Properties.Settings.Default.ucMakeAbilityTime = lblTime.Text;
 Properties.Settings.Default.Save();
}

private void btnClose_Click(object sender, EventArgs e)
{
 this.ParentForm.Close();     ←正しいかどうかわかりませんが、
}                  この場合は正常に保存されている。

返信 編集キー/


管理者用

- Child Tree -