2010-12-14 2 views
1

私はアプリケーション内でドッキング可能なコンテンツとしてmdiの子フォームを持っており、特定のイベントに応じて親フォームからリストボックスを無効/有効にしたいと考えています。親フォームからリストボックスを無効にする

_child.listBox1.Enabled = false; 

しかし、それは無効にしていないようです。 _childは、mdiの子フォームbtwのオブジェクト参照です。なぜ動作しないのですか?これをどのように修正できますか?

+0

ListBoxの名前を変更する必要があります。 – SLaks

答えて

1

_childは、おそらく、子フォームの別のインスタンスを参照します。

_childは、Show()と同じインスタンスを参照していることを確認してください。

+0

ねえ、あなたは正しいよ。フォームのインスタンスが2つあり、もう1つは使用しました。今それは動作します;) – david

0

MDI子にリストボックスを無効にする関数を作成できません.MIDI親から呼び出すことはできますか?

私はパブリックプロパティが悪いデザインの実践と考えられているとして、フォームのコントロールを露出させ、それは動作しますが、ここでlistbox1をプライベート(あなたがデザイナーVS使ってフォームを構築した場合のデフォルトです)

+0

彼は明らかにそうではないコンパイラエラーを取得します。 – SLaks

+0

私はそれを行うことができましたが、私はそれを行うための機能を作りたくありません。また、公開されています。 – david

0

であることを推測します。

将来、ある機能を追加するために、ListViewのような内部のListBoxを別のタイプに変更する必要があるとします。

このシナリオでは、DisableListというメソッドをフォームに作成すると、コードの1つの場所を変更して、リストを無効にする方法を更新するだけで済みます。

_client.listbox1.Enabled = false;などのコードを書く方法を選択した場合は、ListBoxに触れているコードをすべて更新して更新する必要があります。

設計の非常に重要な原則は、クラスの内部実装の詳細をそれを使用する必要があるものに公開することを避けることです。この場合、親フォームがリストがListBoxとして実装されていることを知る必要がない場合は、メリットがあります。

+0

これは悪いことですが、ListBoxを1回(2つのタブを切り替えると)無効にして有効にするつもりですので、あまり関係ないはずです。しかし、ListBoxにコードを追加する必要がある場合は、このアプローチを検討します。アドバイスをいただきありがとうございます。 – david