MSChart를 클릭하고 왼쪽/오른쪽으로 드래그하여 차트를 오른쪽/왼쪽으로 스크롤 할 수있는 방법이 있습니까? 아이디어는 차트의 스크롤 막대를 드래그하는 대신 차트를 드래그하는 것입니다. 단순히 스크롤 막대를 사용하지 않는 이유는이 기능 (보스 및 요구 사항)을 추가해야했기 때문입니다. Btw, C# 및 winforms 사용하고 있습니다. 희망이 충분히 분명했습니다. 감사합니다.차트를 스크롤하려면 MSChart 차트를 드래그
0
A
답변
1
예 가능합니다.
차트 위로 드래그하여 정상적인 확대/축소 메커니즘을 사용할 수 없다는 것이 하나의 문제입니다.
대신 두 개의 mouseevents를 코딩하고 Axis.PixelPositionToValue
함수를 사용하여 데이터 값에 액세스하십시오. 우리가 Axis.Minimum
이동과 적응 얼마나 멀리 이전 범위를 계산 다음
double mDown = double.NaN;
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
Axis ax = chart1.ChartAreas[0].AxisX;
mDown = ax.PixelPositionToValue(e.Location.X);
}
Minimum
및 Maximum
:
먼저 우리는 클릭 한 위치의 데이터 값을 저장
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
if (!e.Button.HasFlag(MouseButtons.Left)) return;
Axis ax = chart1.ChartAreas[0].AxisX;
double range = ax.Maximum - ax.Minimum;
double xv = ax.PixelPositionToValue(e.Location.X);
ax.Minimum -= xv - mDown;
ax.Maximum = ax.Minimum + range;
}
당신이 원하는 것 너무 많이 왼쪽이나 오른쪽으로 드래그하지 않도록 몇 가지 검사를 추가하십시오.
코드에서 y ou는 Minimum
과 Maximum
을 설정했습니다!
또한 x 축 레이블의 형식을 제어하여 소수 자릿수가 많아서 차트가 돌아 가지 않도록해야합니다.
또는 데이터에 따라, 당신은 단순히 ints
로 간격 또는 내 경우에는 적절한 어떤 값의 배수의 단계를 설정할 수 있습니다 : 당신은이해야하는 경우
ax.Minimum -= (int)(xv - mDown) ;
을 표시되는 스크롤바는 여전히 위의 코드를 사용할 수 있습니다. 하지만 당신은이에 의해이
ax.Minimum -= (int)(xv - mDown);
ax.Maximum = ax.Minimum + range;
을 대체해야합니다
double oldPos = ax.ScaleView.Position;
ax.ScaleView.Position -= (xv - mDown);
그러나이 은 일반 scolling와 INTERFER 않습니다. 당신은 당신이 이런 식으로 스크롤을 타격하지 있는지 확인하기 위해 검사를 삽입 할 수 있습니다
RectangleF ipar = InnerPlotPositionClientRectangle(chart1, chart1.ChartAreas[0]);
if (ipar.Contains(e.Location))
{
..
..
을 여전히 여기에 역할을합니다 ..하지만. 따라서 또는이 가장 잘 작동하는 것 같습니다.
InnerPlotPositionClientRectangle
은 here으로 정의됩니다.