掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
オブジェクト指向について (ID:146229)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> このような感じでいいものかどうかご意見聞かせてね。 変数 dx の扱いが適切ではないなど、幾つかの問題点がありますが、 最大の問題は、それぞれのクラス(Form1/irohenkan) の役割が きちんと線引きされていないことです。 まず、Form1 から irohenkan を呼び出していて、さらに irohenkan からも Form1 を呼び出していますよね。 この実装では、クラス間の依存性が高くなりすぎてしまっており、 充分な役割分担ができていません。 現在は、呼び出し元となる Form1 と呼び出される側である irohenkan のそれぞれが ・Form1 側: Timer1_Tick で、go メソッドを呼ぶ。 ・irohenkan 側: go で、Timer1.Interval を変更する。 を処理することが前提となっていますよね。 そのため、このクラスを他のフォームで再利用することができませんし、 対象コントロールやタイマーを別のものに差し替える場合には、 Form1 と irohenkan の両方を直さねばなりません。 結果として、クラスを分ける意味が無いどころか、使い勝手が悪化してしまっています。 たとえばこのクラス設計を見直して、 Public Class Form1 Private henkan As New IroHenkan() Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click henkan.Colors.Add(Color.GreenYellow) henkan.Colors.Add(Color.Gold) henkan.Colors.Add(Color.Blue) Timer1.Start() End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick PictureBox1.BackColor = henkan.GetNextColor() 'Colors で指定した色が順番に返される。 End Sub End Class のようにすれば、IroHenkan クラスは色の管理のみに注力することができます。 (特定のコントロールに依存しなくなったため、IroHenkan クラスの再利用性が高まる) あるいは、フォーム側で Timer1_Tick イベントを制御しなくても良いよう、 タイミング制御も色変換クラスに一任させてしまうという実装パターンもあるでしょう。 Public Class Form1 Dim henkan As New IroHenkan() Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click henkan.Target = PictureBox1 henkan.Internval = 2000 henkan.Colors.Add(Color.GreenYellow) henkan.Colors.Add(Color.Gold) henkan.Colors.Add(Color.Cornsilk) henkan.Start() 'これ以降、2秒間隔で PictureBox の背景色が切り替わる End Sub End Sub あるいは、PictureBox を継承したクラスに色変換の機能を持たせてしまうという手もあるかも。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.