| ■No98552 (ゆい さん) に返信 >> YLables.Add(Chart1, Label1) >> YLables.Add(Chart2, Label2) >> 'YLables.Add(Chart3, Label3) 'Chart3 は値を拾わない > 長文のため分かり易さからも、上のを Private Sub下 に置きたいのですが、
えぇと…どういう意味でしょう?
No98525 において、上記の Add メソッドの呼び出しは、 既に Private Sub Form1_Load の中に書かれていますよね。
要するに、フォームの InitializeComponent が呼ばれた後で 各チャートごとに一回ずつ Add すれば良いだけなので、 呼び出すタイミングとしては ・コンストラクタで、InitializeComponent 呼び出しの後 ・OnLoad メソッドのオーバーライド内 ・Load イベント ハンドラ のいずれかが妥当だと思います。
もし、Form1 の Load イベントが複数回発生するような状況 ……たとえば、ShowDialog で呼び出されており、画面が閉じられた後で 呼び出し元が Dispose することなく、再度 ShowDialog した場合など…… を問題としているのであれば、Load や OnLoad ではなく コンストラクタに移動させれば良いと思います。
また、先の実装だと、変数 YLables は Dictionary(Of Chart, Label) 型ですので、 1 つの Chart につき、1 つの Label という実装になっています。
たとえば、X 軸用のラベルと Y 軸用のラベルを 2 つ用意したいといった状況では、 XLables と YLabels として別々の変数で管理してみたり、あるいは、 Dictionary の Value 側をタプル、配列、List(Of Label) などにする手もありますね。
> 実行後一旦削除もできれば可能なようにも思うのですが、 今回は必要ないのでは?
削除する必要性があるとしたら、フォーム デザイナで Chart や Label を用意しておくのではなく、 プログラムから動的に Chart や Label を生成したり取り除いたりする場合だと思いますが、 今回はそういうわけでも無いでしょうし。 |