大量的試驗和錯誤之後,我意識到一個版本的我提示的代碼可以滾動,而代碼的其他部分保持不變。兩個工具提示用法之間的唯一區別是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軸滾動條將再次起作用。但是,我如何做到這一點,以便兩者都可以發揮作用?我真的不知道crossair提示如何禁用滾動僅在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);
我編輯了你的標題。請參見「[應的問題包括‘標籤’,在他們的頭銜?(http://meta.stackexchange.com/questions/19190/)」,這裏的共識是「不,他們不應該」。 – 2013-03-26 02:44:06