public void MoveCursorToTarget(StripTabCursor cursor) { double cursorPosition = (cursor.XRawValue - _minX) / (_maxX - _minX); if (cursorPosition < 0 || double.IsNaN(cursorPosition)) { cursorPosition = 0; } else if (cursorPosition > 1) { cursorPosition = 1; } // 减去控件宽度的一半保证游标控件中间对齐到位置 int cursorXPosition = (int)Math.Round(PlotRealX + cursorPosition * PlotRealWidth) - (cursor.Control.Width - 1) / 2; int cursorYPosition = (int)PlotRealY; if (cursor.Control.Location.X != cursorXPosition || cursor.Control.Location.Y != cursorYPosition) { cursor.Control.Location = new Point(cursorXPosition, cursorYPosition); } if (PlotRealHeight != cursor.Control.Height) { cursor.Control.Height = PlotRealHeight; } }
private void dataGridView_cursorInfo_CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (_isInternalOperation || e.RowIndex < 0 || e.ColumnIndex < 0) { return; } _isInternalOperation = true; object changedValue = dataGridView_cursorInfo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; StripTabCursor changeCursor = _cursors[e.RowIndex]; switch (e.ColumnIndex) { // case CursorEnableIndex: // changeCursor.Enabled = (bool)changedValue; // break; // case CursorColorIndex: // break; case CursorNameIndex: if (null != changedValue && _cursors.All(cursor => !cursor.Name.Equals(changedValue))) { changeCursor.Name = changedValue.ToString(); } dataGridView_cursorInfo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = changeCursor.Name; break; case CursorSeriesIndex: string seriesName = dataGridView_cursorInfo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); int index = SeriesIndex.Items.IndexOf(seriesName); _cursors[e.RowIndex].SeriesIndex = index - 1; double yValue = _cursors[e.RowIndex].YValue; dataGridView_cursorInfo.Rows[e.RowIndex].Cells[CursorYValueIndex].Value = double.IsNaN(yValue) ? string.Empty : yValue.ToString(); break; case CursorXDataIndex: int xValue; if (int.TryParse(changedValue.ToString(), out xValue)) { changeCursor.XIndex = xValue; } dataGridView_cursorInfo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = changeCursor.XIndex; break; default: break; } _isInternalOperation = false; }
public void RefreshCursorValue(StripTabCursor cursor) { // 游标真实位置需要加上cursor视图和控件本身像素差的偏移 int cursorPosition = cursor.Control.Location.X + StripTabCursorControl.ViewPixelOffset; double valueRatio = (cursorPosition - PlotRealX) / PlotRealWidth; double value = (_maxX - _minX) * valueRatio + _minX; if (value > _maxX) { value = _maxX; } else if (value < _minX) { value = _minX; } cursor.XRawValue = (int)Math.Round(value); }
private void dataGridView_cursorInfo_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (_isInternalOperation || e.RowIndex < 0 || e.ColumnIndex < 0) { return; } _isInternalOperation = true; StripTabCursor changeCursor = _cursors[e.RowIndex]; switch (e.ColumnIndex) { case CursorEnableIndex: // dataGridView_cursorInfo.EndEdit(); changeCursor.Enabled = !changeCursor.Enabled; dataGridView_cursorInfo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = changeCursor.Enabled; // dataGridView_cursorInfo.EndEdit(); break; case CursorColorIndex: ColorDialog loColorForm = new ColorDialog(); if (loColorForm.ShowDialog() == DialogResult.OK) { changeCursor.Color = loColorForm.Color; DataGridViewRow row = dataGridView_cursorInfo.Rows[e.RowIndex]; row.Cells[CursorColorIndex].Style.BackColor = changeCursor.Color; row.Cells[CursorColorIndex].Style.SelectionBackColor = changeCursor.Color; } break; // case CursorNameIndex: // break; // case CursorValueIndex: // break; default: break; } _isInternalOperation = false; }
private void button_delete_Click(object sender, EventArgs e) { if (0 == dataGridView_cursorInfo.SelectedCells.Count) { return; } HashSet <int> rowIndexes = new HashSet <int>(); foreach (DataGridViewCell selectCell in dataGridView_cursorInfo.SelectedCells) { rowIndexes.Add(selectCell.RowIndex); } foreach (int rowIndex in rowIndexes) { string cursorName = dataGridView_cursorInfo.Rows[rowIndex].Cells[CursorNameIndex].Value.ToString(); StripTabCursor deleteCursor = _cursors.First(item => item.Name.Equals(cursorName)); if (null != deleteCursor) { _cursors.Remove(deleteCursor); } } RefreshCursorInfo(); }