私はWinFormsを使用してアプリケーションを作成しています。私はpanel
を持っていて、私はuser control
を示しています。このuser control
の中にはbutton
があります。ボタンをクリックすると、panel
をクリアし、異なるuser control
を表示したいと思います。私は、次のコードを使用していることをやろうとしています:パネルのコントロールをパネルの内側から変更する
private void btnCreateOffer_Click(object sender, EventArgs e)
{
var myControl = new WindowsFormsDemo.View.CreateOffer();
MockUpForm.panMain.Controls.Clear();
MockUpForm.panMain.Controls.Add(myControl);
}
これはparrent形で直接配置ボタンから動作しますが、私はuser control
内で使用する場合、それは言う:
'MockUpForm.panMain' is inaccessible due to its protection level
Iをプライベート/パブリッククラスと関係があるとします。しかし、私はむしろすべてを公的に変えるのではなく、 "正しい"解決策をとるだろう。
これは通常どのような方法での提案ですか?
それは、これを行うには根本的に間違った方法です。代わりにイベントを発生させると、あなたのメインフォームがそれを購読してコントロールを揺らすことができます。 Controls.Clear()を使用することも非常に*非常に間違っています。あなたが削除したコントロールでDispose()メソッドを呼び出す必要があります。そうしないと永続メモリリークが発生します。 –
コメントありがとうございます。私はWinFormsには全く新しいので、多くのことをやっている可能性が非常に高い*間違った:-)。私はイベントメソッドを調べます... – Noceo
@HansPassant:彼は彼が削除されたコントロールを再利用したいかどうかは言及しませんでした。しかし、イベントが登録されていても処分では不十分な場合は、とにかくメモリリークが発生します。 – taffer