1

winform で MSCharts を使用して、いくつかのグラフを表示しています。ユーザーがズームできるようにグラフを設定しました。

chart1.ChartAreas[0].CursorX.IsUserEnabled = true;
chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;

また、MouseDown イベントと Call Hit Test Method を使用して、チャートをドリルダウンし、他のチャート情報を表示します。:

private void chart1_MouseDown(object sender, MouseEventArgs e)
{
  //***** Call Hit Test Method
  HitTestResult result = chart1.HitTest(e.X, e.Y);
  if (result.ChartElementType == ChartElementType.DataPoint || result.ChartElementType == ChartElementType.DataPointLabel)
   {
   //*************************Goes into the Pie Chart - Dept
      int z = result.PointIndex;
      result.Series.XValueType = ChartValueType.DateTime;
      DateTime x = DateTime.FromOADate(result.Series.Points[z].XValue);
      string name = result.Series.Name.ToString();
      name = name + "(" + x.ToShortDateString() + ")";
      if (funChartExists(name) == false)
      {       
         subMakeNewPieSeries(result.Series.Name.ToString(), x, name);
      }
      chart1.ChartAreas["Pie"].Visible = true;
      chart1.ChartAreas["Task"].Visible = false;
      chart1.ChartAreas["Default"].Visible = false;
      chart1.Series[name].Enabled = true;
      chart1.Legends[0].Enabled = false;
      chart1.ChartAreas["Default"].RecalculateAxesScale();
   }
   chart1.Invalidate();
}

チャートを最初のビューにリセットするボタンもあります。

private void cmbReset_Click(object sender, EventArgs e)
{
    chart1.ChartAreas["Pie"].Visible = false;
    chart1.ChartAreas["Task"].Visible = false;
    chart1.ChartAreas["Default"].Visible = true;
    chart1.Legends[0].Enabled = true;
    for (int x = 0; x < chart1.Series.Count; x++)
    {
        if (chart1.Series[x].ChartArea == "Pie" || chart1.Series[x].ChartArea == "Task")
        {
            chart1.Series[x].Enabled = false;
        }
    }
    chart1.ChartAreas["Default"].RecalculateAxesScale();
    chart1.Invalidate();        
}

私の問題は、(リセット ボタンを使用して) メイン チャートに戻るときです。チャートは、最初のドリル ダウンからのマウス クリックを保持しており、2 回目のクリック (またはマウス アップ) でズームインするのを待っています。その 2 番目のズーム ポイントを待っている暗い灰色の背景選択をドラッグしているマウス。

マウス選択のズーム値をリセットする方法、またはヒット テストを実行するときにオフにし、リセット後にオンに戻す方法はありますか?

4

1 に答える 1

1

まず、いつマウスダウンを使用する必要があり、いつマウスアップを使用する必要がありますか?

マウスダウンは、操作がボタンが下がった状態でボタンが上がった状態で終了するシーケンスの一部である場合に使用する必要があります。

操作が単一の性質(「クリック」)である場合は、マウスアップを使用する必要があります。

ダウンとアップのどちらを使用する必要がありますか?upは正しく機能し、問題を解決しますか?

一般的な経験則として(これは、ナイーブなプログラマーには無視されることがあります)、マウスダウン+マウス移動+マウスアップ操作の形式は次のとおりです。

MouseDown
    Capture the mouse

MouseMove
    If MouseIsCaptured
        Perform move operation

MouseUp
    If MouseIsCaptured
        Release capture and finalize the operation

チャートコントロールがこの手順に従っている場合、ソリューションはマウスキャプチャを自分で解放するのと同じくらい簡単かもしれません。これはである必要がありますchartControlInstance.Capture = false

于 2012-08-27T17:29:43.073 に答える