|
■No83709 (KY さん) に返信
> この赤色の線をマウスを左クリックでは線が消え、その状態で右クリックすれば再度描画が出来るようになる。
左クリックで消えたなら、再度左クリックで復活した方が On/Off 的にはわかりやすい気がします。
(それとも右クリックした場合は、現在位置ではなく消した時の位置に復活させたいのでしょうか)
とりあえず、赤ラインを表示するかどうかは、Boolean 型の変数で管理すれば良いと思います。
On/Off についてですが、左クリックだけなら Click イベントでよいですが、
右クリックかどうかの判定も行うなら、MouseDown イベントが都合が良いでしょう。
以下サンプル。
説明コメントをつけた関係上、お題とは微妙に異なるコードになっていますが御容赦を。
Private _verticalLine As Boolean = True '左クリックで表示/非表示
Private _horizontalLine As Boolean = True '右クリックで移動/固定
Private Sub Chart1_MouseDown(sender As Object, e As MouseEventArgs) Handles Chart1.MouseDown
If e.Button.HasFlag(MouseButtons.Left) Then
_verticalLine = Not _verticalLine '左クリックで反転
End If
If e.Button.HasFlag(MouseButtons.Right) Then
_horizontalLine = Not _horizontalLine '右クリックで反転
Chart1.Invalidate()
End If
End Sub
Private _hp As Point
Private _vp As Point
Private Sub Chart1_MouseMove(sender As Object, e As MouseEventArgs) Handles Chart1.MouseMove
_vp = e.Location '垂直ラインの座標を現在のカーソル位置にする
If _horizontalLine Then
_hp = e.Location '垂直ラインの座標は、固定モードでない場合のみ更新
End If
Chart1.Invalidate()
End Sub
Private Sub Chart1_PostPaint(sender As Object, e As System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs) Handles Chart1.PostPaint
Dim g = e.ChartGraphics.Graphics
Dim ca = Chart1.ChartAreas(0)
Dim area = Rectangle.FromLTRB(
ca.AxisX.ValueToPixelPosition(ca.AxisX.Minimum),
ca.AxisY.ValueToPixelPosition(ca.AxisY.Minimum),
ca.AxisX.ValueToPixelPosition(ca.AxisX.Maximum),
ca.AxisY.ValueToPixelPosition(ca.AxisY.Maximum)
)
If _verticalLine Then
'水平ラインはOn/Offされるので、表示モードのときのみ描画する
g.DrawLine(Pens.Red, _vp.X, area.Top, _vp.X, area.Bottom)
End If
'_hp.Y が固定されていようと変動しようと、垂直ラインは常に描画する
g.DrawLine(Pens.ForestGreen, area.Left, _hp.Y, area.Right, _hp.Y)
End Sub
|