public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { if (this.RowIndex < 0) { return; } // Set the value of the editing control to the current cell value. base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); DataGridViewTrackEditingControl ctl = DataGridView.EditingControl as DataGridViewTrackEditingControl; ctl.Font = dataGridViewCellStyle.Font; ctl.Width = GetSize(this.RowIndex).Width; ctl.SelectionBackColor = dataGridViewCellStyle.BackColor; ctl.ParityText = (StringWithParity)this.Value; CardDataGridView grid = (CardDataGridView)DataGridView; ctl.variant = grid.GetVariant(rowIndex, this.ColumnIndex); ctl.originalLength = ctl.Text.Length; if (ctl.variant != null) { bool ali = grid.GetVariant(rowIndex, this.ColumnIndex).Alignment == null; int alignment = ali ? 0 : (int)grid.GetVariant(rowIndex, this.ColumnIndex).Alignment; ctl.Margin = new Padding(alignment * CalculateFontSize(ctl.Font).Width + 3, 3, 3, 3); ctl.SelectionAlignment = HorizontalAlignment.Left; ctl.Modified = false; if (ali) { if (ctl.variant.HasSS) { ctl.SelectionAlignment = HorizontalAlignment.Left; } else if (ctl.variant.HasES) { ctl.SelectionAlignment = HorizontalAlignment.Right; } else { ctl.SelectionAlignment = HorizontalAlignment.Center; } } } else { ctl.Margin = new Padding(3, 3, 3, 3); ctl.SelectionAlignment = HorizontalAlignment.Center; } }
public override void DetachEditingControl() { if (DataGridView == null) { return; } DataGridViewTrackEditingControl ctl = DataGridView.EditingControl as DataGridViewTrackEditingControl; if (ctl != null && ctl.Modified) { StringWithParity text = ctl.ParityText; CardDataGridView grid = (CardDataGridView)DataGridView; Card card = grid.GetCard(this.RowIndex); if (card != null) { card.SetTrackString(this.ColumnIndex - (int)Presentation.cardGridColumn.TRACK1_COLUMN, text); } //maybe this will slow the programm, but it is needed. // otherwise we will get alignment bugs once content changed. ListCardUtil.SetAlignment(grid.GetActualCardsFromGrid(), 0); if (crf.Properties.Settings.Default.autoResize && (ctl.Text.Length > ctl.originalLength || ctl.Text.Length < ctl.originalLength - 10) ) { grid.AutoResizeColumn(this.ColumnIndex); #if DEBUG CardDataGridView.RESIZECOLUMNCOUNT++; grid.UpdateStatusStripTextWhenResizing(); #endif } } base.DetachEditingControl(); }
// Images for selected and normal states. private Image GetRtfImage(int rowIndex, object value, bool selected, DataGridViewCellStyle cellStyle, int?leftAlignment) { Size cellSize = GetSize(rowIndex); if (cellSize.Width < 1 || cellSize.Height < 1) { return(null); } //RichTextBox ctl = _editingControl; DataGridViewTrackEditingControl ctl = _editingControl; if (ctl == null) { return(null); } //ctl.ApplyCellStyleToEditingControl(cellStyle); ctl.Size = GetSize(rowIndex); ctl.Font = cellStyle.Font; ctl.ParityText = (StringWithParity)value; //ctl.Text = ((CRCString)value).ToString(); if (leftAlignment == null) { switch (cellStyle.Alignment) { case DataGridViewContentAlignment.MiddleLeft: ctl.SelectionAlignment = HorizontalAlignment.Left; break; case DataGridViewContentAlignment.MiddleRight: ctl.SelectionAlignment = HorizontalAlignment.Right; break; default: ctl.SelectionAlignment = HorizontalAlignment.Center; break; } leftAlignment = 0; } // Print the content of RichTextBox to an image. Size imgSize = new Size(cellSize.Width - _editingControl.Margin.Left - _editingControl.Margin.Right + 1 - leftAlignment.Value * fontSize.Width, cellSize.Height - _editingControl.Margin.Bottom - _editingControl.Margin.Top + 1); //it might happen if alignment is big. if (imgSize.Width <= 0) { imgSize.Width = 1; } Image rtfImg = null; if (selected) { // Selected cell state ctl.BackColor = DataGridView.DefaultCellStyle.SelectionBackColor; ctl.ForeColor = DataGridView.DefaultCellStyle.SelectionForeColor; // Print image rtfImg = RichTextBoxPrinter.Print(ctl, imgSize.Width, imgSize.Height); // Restore RichTextBox ctl.BackColor = DataGridView.DefaultCellStyle.BackColor; ctl.ForeColor = DataGridView.DefaultCellStyle.ForeColor; } else { rtfImg = RichTextBoxPrinter.Print(ctl, imgSize.Width, imgSize.Height); } return(rtfImg); }