我在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();
}
我的问题是当我回到主图表(使用重置按钮)时,图表保留从第一次向下钻取鼠标单击并等待第二次单击(或鼠标向上)放大。所以移动鼠标时,它会拖动一个深灰色的背景选择,等待第二个缩放点。
有没有办法重置鼠标选择缩放值,或者在我进行命中测试时将其关闭,然后在重置后将其重新打开?
答案 0 :(得分:1)
首先,我们什么时候应该使用鼠标,何时应该使用鼠标?
当操作是序列的一部分时,应该使用鼠标按下按钮,按钮按下并以按钮结束。
当操作具有单一性质(“点击”)时,应使用鼠标按钮。
你应该使用向下还是向上?是否正常运行并解决了您的问题?
作为一般经验法则(有时被天真的程序员忽略),鼠标按下+鼠标移动+鼠标向上操作具有以下形式:
MouseDown
Capture the mouse
MouseMove
If MouseIsCaptured
Perform move operation
MouseUp
If MouseIsCaptured
Release capture and finalize the operation
如果图表控件遵循此过程,您的解决方案可能就像自己释放鼠标捕获一样简单。这应该是chartControlInstance.Capture = false
。