| ■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(); ←正しいかどうかわかりませんが、
} この場合は正常に保存されている。
|