protected void chart1_MouseWheel(object sender, MouseEventArgs e)
{
double y, yMin, yMax, yMin2, yMax2;
Charting.ChartArea ca;
Charting.HitTestResult result = chart1.HitTest(e.X, e.Y);
// HitTestResult 객체 멤버는 마우스휠 이벤트가 발생한 ChartArea 정보를 갖고 있다.
if (result.ChartArea != null)
{
ca = result.ChartArea;
var yAxis = ca.AxisY;
yMin = yAxis.ScaleView.ViewMinimum;
yMax = yAxis.ScaleView.ViewMaximum;
y = yAxis.PixelPositionToValue(e.Location.Y);
if (e.Delta < 0) // Scrolled down.
{
yMin2 = y - (y - yMin) / 0.9;
yMax2 = y + (yMax - y) / 0.9;
}
else //if (e.Delta > 0) // Scrolled up.
{
yMin2 = y - (y - yMin) * 0.9;
yMax2 = y + (yMax - y) * 0.9;
}
if (yMax2 > 3.3) yMax2 = 3.3;
if (yMin2 < 0) yMin2 = 0;
ca.AxisY.Maximum = yMax2;
ca.AxisY.Minimum = yMin2;
// 아래 코드는 확대/축소 했을 때, y-축 값이 소수점 아래 한자리 또는 두자리로 떨어지도록
// y-축 값의 범위에 따라 y-축 라벨의 interval을 지정
double dy = yMax2 - yMin2;
if (dy < 0.05) ca.AxisY.Interval = 0.01;
else if (dy < 0.1) ca.AxisY.Interval = 0.02;
else if (dy < 0.2) ca.AxisY.Interval = 0.05;
else if (dy < 0.65) ca.AxisY.Interval = 0.1;
else if (dy < 1.25) ca.AxisY.Interval = 0.2;
else if (dy < 1.75) ca.AxisY.Interval = 0.25;
else ca.AxisY.Interval = 0.5;
ca.AxisY.IntervalOffset = ((int)(ca.AxisY.Minimum / ca.AxisY.Interval)) * ca.AxisY.Interval
- ca.AxisY.Minimum;
}
}
'프로젝트' 카테고리의 다른 글
CRCS4x Viewer (0) | 2020.02.10 |
---|---|
c# chart zoom (X-축 : userSelection 속성 이용, Y-축 : 마우스 스크롤 이용) (0) | 2020.02.05 |
c# 소스 파일 분할 (0) | 2020.01.22 |
C# DLL 사용방법 (0) | 2017.11.30 |
[C#] char[]를 string으로 변환하기 (퍼옴) (0) | 2017.03.19 |