- PR -

親フォームで銘柄選択、子フォームで数銘柄のグラフ表示は?

投稿者投稿内容
SSD
会議室デビュー日: 2004/09/20
投稿数: 15
投稿日時: 2004-11-22 11:42
たびたび、失礼いたします。VB.Netを使用しグラフ作成を試みています。

グラフソースのレコードの銘柄は、数十〜数百種類におよびその数は確定していません。
親フォームメインメニューで銘柄を選択、子フォームに違う銘柄のグラフを数銘柄同時に表示させようと考えています。

現在行っている処理は、親フォームのメニュー選択時に銘柄コードを指定しDB(*.MDB)をクエリー読込み構造体配列に格納。
子フォームPictureBoxのPaintイベントで構造体配列を[For・・・Next]で座標変換。
PictureBoxを用いた理由は、グラフ[ScrollBar.Scroll]時にエリア指定がやりやすかったからです。
また、Paintイベントを用いた理由は、子フォームの[Resize]時に再描画が簡単と考えたからです。
構造体と子フォームはまだ1つしか持っていません。これは、銘柄の数が不確定なので拡張性が失われることと、
同じコードをズラズラ並べるのはスマートでない・・・。と思い、何か別な方法で(例えば、銘柄フラグ[Select Case・・・End Select])対処させようと考えていました。

ところが、
なかなかアイデアが浮かびません。
子フォームの[Resize](例えば、[TileHorizontal])時に数銘柄表示されているグラフは、最後読み込んだ銘柄に統一されてしまいます。(当然ですが・・・)

構造体配列の量が増えメモリー消費はしょうがないと思いますが、それでも、私の持っている知恵では[Resize]対処は回避できません。
子フォームを考えられる銘柄全ての分を作成するしかないのでしょうか?

どなたか知恵をお貸しください。よろしくお願いします。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2004-11-22 16:06
レスついてないようなので…。
俺の読解力が無いだけなのかもしれませんが,一体何を聞きたいのかわかりません。
VIM
ベテラン
会議室デビュー日: 2003/11/14
投稿数: 76
投稿日時: 2004-11-22 16:33
ない知恵を絞ってまとめてみました。

●Vb.Netを使っている。
●グラフを作りたい。
●どのようがグラフか(棒グラフか折れ線か、株価チャートか)は不明。
●グラフコンポーネントは使用していない。
●グラフの描画コンポーネントとして、PictureBoxを使用している。
●親フォームと子フォームがある
●親フォームメインメニューで銘柄を選択し、子フォームには、親フォームで選択した銘柄とは違う銘柄のグラフを、数銘柄同時に表示する?
●MDBファイルを使用している。
●グラフデータの元は、MDBから抽出している?
●グラフは、子フォームに表示する。
●子フォームには、ScrollBarとPictureBoxがある。
●グラフの描画は、PictureBoxのPaintイベントで描画している。
●PictureBoxのResizeイベント時が問題?

銘柄というのは、株価関係でしょうか?
株価チャートのグラフ?
構造体配列って?(日時と株価をあわせたデータ構造のこと?)

すみません。力になれません(汗
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-11-22 16:57
おそらくこのスレッドの続きですよね?

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16604&forum=7
SSD
会議室デビュー日: 2004/09/20
投稿数: 15
投稿日時: 2004-11-22 18:43
要点の分かりづらい文章で申し訳ありません。株価チャートです。株価レコードはMDBから読込んでいます。

つまずいているところを簡単に申しますと、
親フォームのメニューで銘柄を選択し、その銘柄のグラフを子フォームで表示させたい訳ですが、違う銘柄のグラフを子フォームとして複数表示させたい。
銘柄は何百とあるので、その分の子フォームを作成しないといけないのか・・・?ということです。

もし、子フォーム1つの作成で何種類もの銘柄をグラフ表示する方法があれば教えてもらえれば・・・。とスレを立てました。

知識が市販の入門書程度しかないので、基本設計が悪く行き詰っているのだと思っています。

最終的に表示させたいイメージを以下にサイトアップいたしました。
http://www.online-gate.com/index2.html

burton999さんのおっしゃるとおり
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16604&forum=7
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16763&forum=7
の続きです。
同じところに書くのはスレッドの表題が違うので別にスレを立てました。
ルール違反でしたらお詫びします。

ほとんどはVIMさんのまとめていただいたとおりです。
ただ、
●親フォームメインメニューで銘柄を選択し、子フォームには、親フォームで選択した銘柄とは違う銘柄のグラフを、数銘柄同時に表示する?
が、親フォームで選択した銘柄を子フォームでグラフ表示し、また違う銘柄を選択した場合にさらに表示する。です。

構造体配列とは、構造体を配列にした形式のことです。つまりコレクションです。
グラフコンポーネントを使用しない理由は、表示した複数のグラフを個別に複雑に加工したいためです。

以上です。

最終的にサイトアップしたことが出来上がれば、大幅な基本設計変更もいたしかたありません。
よろしくお願いします。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-11-22 22:07
unibon です。こんにちわ。

引用:

SSDさんの書き込み (2004-11-22 11:42) より:
構造体と子フォームはまだ1つしか持っていません。これは、銘柄の数が不確定なので拡張性が失われることと、
同じコードをズラズラ並べるのはスマートでない・・・。と思い、何か別な方法で(例えば、銘柄フラグ[Select Case・・・End Select])対処させようと考えていました。


上記の「まだ1つしか持っていません」という意味が良く分かりません。クラスの数が1つを超えることはないと思うのですが、見ているとなんだか銘柄数だけ作られようとしている(そしてそれは「スマート」ではないとは思われてはいる)ようにも感じます。

どうも、提示されたようなアプリケーションを開発するためには、Windows アプリケーション(Windows に限らず GUI を持つもの一般)のイベントハンドリングの仕組みの理解が前提として必要なのですが、それが抜けているように思います。また、いわゆる MVC(Model-View-Controller)の概念も、だいたいで良いのですが、必要です。今はおそらくひとつの Model(銘柄) が、意図せず複数の View(子フォーム) と関係を持ってしまっているのでしょう。
GUI では、"paint" と呼ばれるルーチンは、システムから必要に応じて不意に何回でも呼ばれるものです(resize はその一因にすぎません)。そういうふうに呼ばれるという前提で paint ルーチンが書かれていないと、うまく動かせません。
やっぱり例がないと難しいですね。Stock のアプリケーションとかは、昔から MS のサンプルの定番なので、どこかにありそうな気もするのですが...
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-11-22 22:44
 私は分布図と折れ線グラフと経路グラフ(?)を描くのに、グラフ描画ルーチンを自作しようとしています。分布図に折れ線グラフを重ねられるグラフコンポーネントを見つけられない&買うのと省機能のものを作るのと、おそらく省機能を作った方が安そうなので(ライセンスは複数必要だし、問い合わせをせずにすんだこともないし)。

 それで、bitmapを作ってそこに描画するなら、同じように作れそうですね。残念ながら、ソースコードは提示できません。
 作り方は、とにかく分解することです。例えば、エクセルにグラフを貼り付けて、適当な場所をクリックしてみてください。クリックしたときにいくつかの図形が選択されますが、その図形毎にクラスが作ってあります。
 ところが、ひとつ注意するところがあります。unibonさん指摘の『見ているとなんだか銘柄数だけ作られようとしている(そしてそれは「スマート」ではないとは思われてはいる)ようにも感じます』の辺り。折れ線(株価チャートは上下幅もまとめて)で1つのクラスとし、クラスのインスタンスを複数作ればokです。

 ところで、ビットマップを作る、というところを、外部に依存するものがないように、きれいに切り分けましょう。そうすると、その部分は後に『Webアプリ』になっても使い回すことができます。
_________________
SSD
会議室デビュー日: 2004/09/20
投稿数: 15
投稿日時: 2004-11-23 16:58
unibonさん、Jittaさん。こんにちは。
返答ありがとうございます。

ひとつのイベントを理解しても、それを相互関係で理解しないとまずい。
ルーチン1つのロジックは間違っていなくても、ロジックを書かれている場所を総合的にアルゴリズム化出来ないと正常に動作しない。
そのようなこととでしょうか?

私の場合、初めてのプログラミングで、ひとつのイベントを理解してから先に進む。
考えていたつもりでも本末転倒な部分はあり、たしかにその辺がおろそか(というか無視)になっていました。
丁寧なご指導ありがとうございます。
基本的な動作原理を勉強しなおします。MVCなる考え方を教えていただきありがとうございました。サンプルも探してみます。

まずは、VBで何とかグラフを自在に作れるようになりたいです。
また、このグラフは頻繁に更新を(1/10秒)繰り返す予定ですので、Bitmap貼り付け方式は今回少し難しい気がします。
説明不足で申し訳ありません。
しかし、Jittaさんのアドバイスはいずれ挑戦しようと思っています。
Windowsアプリケーションの次は、Webアプリケーションにトライしようと思っていますので、
その際にBitmap貼り付けは、やってみたいです。

皆さん、ご親切にありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)