2024/05/02

TabPageに貼り付けたグラフコントロール

表示速度重視で実装した簡易モード。流石にちょっと思い、詳細モード同様にTabControlを使う標準モードして作ってみた。TabControlのTabPageに動的にchartコントロール、静的にLiveChart2のCartesianChartコントロールを別々のページに貼り付けてます。Formのロード時と別レース表示でこれらのサイズの調整をしてます。レースが変われば頭数が変わったりで調整は必要なのと、前回終了時のサイズに次回起動時に合わせるとデザイン時のサイズでは合わないからです。

症状としてはレース表示切替時には思い通りに行くのですが、ロード時に調整しても上手く行きません。Copilotに色々とアドバイス貰ってロード時にはまだコントロールが中途半端で.Shownとか.Layout、はては.Resizeとかまあ、Anchorプロパティとかも試しましたが思い通りの動作には出来ないので諦めました。DockをFillにするのが一番だと思いますが、それだとTabControlの隣に表示しているDataGridViewと合わない。TabControlにはグラフ以外にDataGridViewを貼ったページもありグラフコントロールの位置を上部にマージン作って合わせてるのでDockをFillには出来ない。これと同様にAnchorも左右のみ指定してみたけどこの上部のオフセットがAnchor指定で変わってしまう。

昨夜4~5時間Copilotに振り回されたけど断念して最初の表示ではグラフのサイズが合ってないとQAに記述して逃げる判断となりました😓

これが初回表示状態のChartコントロール。
レース移動して戻ってくればこんな感じ。
こちらはCartesianChartの初回で
戻ってくると。あっ、棒グラフの色を特に指定してないとランダムに変わるっぽい(笑)

で、ここでちょっとした問題を発見。キー入力の場合、以前ちょっとここでも書いたかもなんですがフォームでKeyPreviewプロパティをTrueにすればフォームのキーイベントで一括して処理が記述出来るんですが、マウス入力にはPreview的なものはないのでフォーム上全てのコントロールのマウスダウンイベントにフック付けてます。しかし、どうやらCartesianChart上でマウス操作すると2重にイベントが発生してる感じでワンクリックなのに2レース移動しちゃう。Chartコントロールは動的に貼り付けてるので、それが功を奏してなのか問題無いのでちょっとCartesianChartも動的に配置する方向で修正してみます。

追記 2024.5.2 9:08
CartesiaChartも動的に配置してみましたが改善されず、当たり前ですが配置する前にフックして配置するとCartesianChart上ではマウスクリック反応せず。これ、LiveChart2自体まだベータなんですが何か他のコントロールとは動作が違ってるっぽいです。
これもQA記述で逃げておきます😓

追記 2024.5.2 9:24
ちょっとダメ元で、全てのコントロールにフック付けた後にCartesianChartをTabPageに貼り付けて、CartesianChartには個別にフック付けた所、問題解決しました。全てのコントロールにフック付ける時にフォーム上のコントロールを回帰的に探してフックしてるんですが、貼り付けた後だと上手く行かない感じですね。

0 件のコメント:

コメントを投稿