7

マウス ホイールを使用して Microsoft チャート コントロールでズームを有効にする方法

以下のコードがあります。このイベントの作成方法を知る必要がありますか? どのクラスにいる..

private void chData_MouseWheel(object sender, MouseEventArgs e)
{
    try
    {
        if (e.Delta < 0)
        {
            chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset();
            chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset();
        }

        if (e.Delta > 0)
        {
            double xMin = chart1.ChartAreas[0].AxisX.ScaleView.ViewMinimum;
            double xMax = chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum;
            double yMin = chart1.ChartAreas[0].AxisY.ScaleView.ViewMinimum;
            double yMax = chart1.ChartAreas[0].AxisY.ScaleView.ViewMaximum;

            double posXStart = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 4;
            double posXFinish = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 4;
            double posYStart = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 4;
            double posYFinish = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 4;

            chart1.ChartAreas[0].AxisX.ScaleView.Zoom(posXStart, posXFinish);
            chart1.ChartAreas[0].AxisY.ScaleView.Zoom(posYStart, posYFinish);
        }
    }
    catch { }            
}
4

2 に答える 2

5

上記の答えは、

chData.MouseWheel += new MouseEventHandler(chData_MouseWheel);

しかし、私が見つけたところによると、コードでチャート コントロールにフォーカスを設定しない限り、チャートのマウス ホイールは機能しません。そこで、チャート コントロールのマウス入力を使用してチャートにフォーカスを設定し、チャート コントロールのマウス リーブ イベントを使用してコントロールを親に戻しました。

したがって、以下の行をコードに追加し、対応するチャート コントロールのマウス リーブ イベントとマウス エンター イベントをバインドし、上記の行も追加する必要があります。

    private void chartTracking_MouseEnter(object sender, EventArgs e)
    {
        this.chartTracking.Focus();
    }

    private void chartTracking_MouseLeave(object sender, EventArgs e)
    {
        this.chartTracking.Parent.Focus();
    }
于 2014-07-11T23:17:25.790 に答える
3

あなたが持っているのは、MouseWheelイベントのハンドラー メソッドです。MouseWheelチャート コントロールのイベントにハンドラー メソッドをアタッチする必要があります。メソッド シグネチャから、チャート コントロールの名前は であると想定されるchDataため、フォームのコンストラクターで次のコードを使用できます。

chData.MouseWheel += new EventHandler(chData_MouseWheel);

もちろん、設計時にハンドラーをイベントに関連付けることもできます。これを行うには、[プロパティ] ウィンドウを使用し、ツールバーの稲妻をクリックして [イベント] ビューに切り替えます。次に、イベントを見つけてMouseWheelドロップダウン矢印をクリックし、ハンドラー メソッドのシグネチャを選択します。これにより、デザイナーは上記のコードをフォームのコード ビハインド ファイルに書き込みます。

それとは別に、コードには巨大な赤い旗があります: 空のcatchブロックです。例外を処理していないか、それに対して何もしていない場合は、それをキャッチするべきではありません。これはポケモンではありません。すべて捕まえても報酬はありません。

于 2013-07-22T12:47:03.580 に答える