【发布时间】:2013-03-25 08:47:19
【问题描述】:
[编辑]
经过大量试验和错误后,我意识到我的工具提示代码的一个版本可以滚动,而其余代码保持不变。两种工具提示用法的唯一区别是 pos.x 值发生了偏移,而不是鼠标所在的位置。
这意味着代替
/*X-axis Tooltip*/
tooltip.Show(Math.Truncate(xValue * 1000) / 1000 + unit_Converter(), this.chart1, pos.X, pos.Y - 15);
我这样做了
/*X-axis Tooltip*/
tooltip.Show(Math.Truncate(xValue * 1000) / 1000 + unit_Converter(), this.chart1, pos.X - 70, pos.Y - 15);
这就是所有的不同。现在我可以单击并拖动 X 轴滚动条。我想我总是可以滚动我的 Y 轴的原因是它从一开始就移动了 15。
因此,如果您将工具提示位置设置在鼠标位置的准确位置,那么显然您将在尝试滚动时单击工具提示本身,而不是滚动条。
Josh W 提供的答案同样有效,因为仅使用“this”而不是“this.chart”会出于某种原因自动将工具提示移动一点。感谢您的帮助!
[原问题]
我有一个带有 Y 轴和 X 轴滚动条的图表。有一段时间,我的两个滚动条都起作用了。随着我的代码增长,X 轴滚动条现在不会移动,而 Y 轴滚动条移动得很好。我很困惑。任何帮助将不胜感激。
我参考了其他答案,例如
c# chart control, vertical scrolling problems with zoom ["Stuck Scroll bar"]
但是X轴滚动条还是卡住了....
[编辑]: 我意识到我的鼠标移动代码工具提示导致了这种情况。如果我禁用对鼠标移动代码的调用,X 轴滚动条将再次起作用。但是我怎样才能让两者都能发挥作用呢?我真的不知道十字线工具提示如何仅禁用 X 轴上的滚动,而不是 Y 轴上的滚动...
void chart1_MouseMove(object sender, MouseEventArgs e)
{
var pos = e.Location;
_point.X = e.Location.X;
_point.Y = e.Location.Y;
try
{
if ((chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X) >= 0) && (chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X) <= max))
{
//Crossair
chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(_point, true);
//Tooltips
double xValue = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
/*X-axis Tooltip*/
tooltip.Show(Math.Truncate(xValue * 1000) / 1000 + unit_Converter(), this.chart1, pos.X, pos.Y - 15);
}
}
catch (Exception exception)
{
}
}
我设置系列设置的代码:
var series = chart1.ChartAreas[chart1.Series[iname].ChartArea];
//Line thickness
chart1.Series[iname].BorderWidth = 2;
series.AxisX.Minimum = 0;
series.AxisX.Maximum = max;
series.AxisY.Minimum = 0;
series.AxisY.Maximum = checkedListBox1.CheckedItems.Count * 3 - 2;
series.AxisX.MajorGrid.Interval = time_of_cycle;
series.AxisX.MajorGrid.LineDashStyle = ChartDashStyle.DashDotDot;
series.AxisY.MajorGrid.Interval = 2;
series.CursorX.Interval = 0;
series.CursorY.Interval = 0;
series.AxisX.ScaleView.SmallScrollSize = time_of_cycle /100 ;
series.AxisY.ScaleView.SmallScrollSize = 1;
//Disables Y axis lable
series.AxisY.LabelStyle.Enabled = false;
series.AxisX.LabelStyle.ForeColor = Color.White;
series.AxisY.LabelStyle.ForeColor = Color.White;
series.AxisX.LabelStyle.Format = label_Style_Converter();
series.AxisX.LabelStyle.Interval = time_of_cycle * 2;
series.AxisX.MajorGrid.LineColor = Color.DimGray;
series.AxisY.MajorGrid.LineColor = Color.DimGray;
series.AxisX.ScrollBar.BackColor = Color.LightGray;
series.AxisY.ScrollBar.BackColor = Color.LightGray;
series.AxisX.ScrollBar.ButtonColor = Color.LightGray;
series.AxisY.ScrollBar.ButtonColor = Color.LightGray;
series.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
series.AxisY.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
series.AxisX.ScrollBar.Enabled = true;
series.AxisY.ScrollBar.Enabled = true;
series.AxisX.ScrollBar.IsPositionedInside = false;
series.AxisY.ScrollBar.IsPositionedInside = false;
series.AxisX.IsMarginVisible = true;
series.AxisY.IsMarginVisible = false;
series.AxisX.Name = "µs";
series.AxisX.ScaleView.Size = max - time_of_cycle / 100;
series.AxisY.ScaleView.Size = (checkedListBox1.CheckedItems.Count * 3 - 2) + 1 ;
series.BackColor = Color.Black;
//crosshair
var cursor_Y = chart1.ChartAreas["ChartArea1"].CursorY;
var cursor_X = chart1.ChartAreas["ChartArea1"].CursorX;
cursor_Y.LineWidth = 1;
cursor_Y.LineDashStyle = ChartDashStyle.Solid;
cursor_Y.LineColor = Color.DarkRed;
cursor_Y.SelectionColor = Color.LightGray;
cursor_X.LineWidth = 1;
cursor_X.LineDashStyle = ChartDashStyle.Solid;
cursor_X.LineColor = Color.DarkRed;
chart1.MouseMove += new MouseEventHandler(chart1_MouseMove);
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
标签: c# .net winforms scrollbar mschart