использую такой код:
public class DataGridViewMaskedTextBoxEditingControl : MaskedTextBox, IDataGridViewEditingControl
{
public DataGridViewMaskedTextBoxEditingControl () :base()
{}
#region IDataGridViewEditingControl Members
public Cursor EditingPanelCursor
{
get { return this.Cursor; }
}
private DataGridView dataGrid;
public DataGridView EditingControlDataGridView
{
get
{
return dataGrid;
}
set
{
dataGrid=value;
}
}
public object EditingControlFormattedValue
{
get { return this.Text; }
set { this.Text = value.ToString(); }
}
public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
{
return EditingControlFormattedValue;
}
public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
{
switch ((keyData & Keys.KeyCode))
{
case Keys.Prior:
case Keys.Next:
if (this.bValueChanged)
{
return true;
}
break;
case Keys.End:
case Keys.Home:
if (this.SelectionLength != this.Text.Length)
{
return true;
}
break;
case Keys.Left:
if (((this.RightToLeft == RightToLeft.No) && ((this.SelectionLength != 0) || (base.SelectionStart != 0))) || ((this.RightToLeft == RightToLeft.Yes) && ((this.SelectionLength != 0) || (base.SelectionStart != this.Text.Length))))
{
return true;
}
break;
case Keys.Up:
if ((this.Text.IndexOf("\r\n") >= 0) && ((base.SelectionStart + this.SelectionLength) >= this.Text.IndexOf("\r\n")))
{
return true;
}
break;
case Keys.Right:
if (((this.RightToLeft == RightToLeft.No) && ((this.SelectionLength != 0) || (base.SelectionStart != this.Text.Length))) || ((this.RightToLeft == RightToLeft.Yes) && ((this.SelectionLength != 0) || (base.SelectionStart != 0))))
{
return true;
}
break;
case Keys.Down:
{
int num1 = base.SelectionStart + this.SelectionLength;
if (this.Text.IndexOf("\r\n", num1) != -1)
{
return true;
}
break;
}
case Keys.Delete:
if ((this.SelectionLength > 0) || (base.SelectionStart < this.Text.Length))
{
return true;
}
break;
case Keys.Return:
if ((keyData & (Keys.Alt | Keys.Control | Keys.Shift)) == Keys.Shift)
{
return true;
}
break;
}
return !dataGridViewWantsInputKey;
}
public void PrepareEditingControlForEdit(bool selectAll)
{
if(selectAll)
this.SelectAll();
}
public bool RepositionEditingControlOnValueChange
{
get { return false; }
}
private int m_nRowIndex;
public int EditingControlRowIndex
{
get
{
return m_nRowIndex;
}
set
{
m_nRowIndex = value;
}
}
public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
{
//this.TextAlign = dataGridViewCellStyle.Alignment;
this.Font = dataGridViewCellStyle.Font;
this.ForeColor = dataGridViewCellStyle.ForeColor;
this.BackColor = dataGridViewCellStyle.BackColor;
}
bool bValueChanged;
public bool EditingControlValueChanged
{
get
{
return bValueChanged;
}
set
{
bValueChanged=value;
}
}
protected override void OnTextChanged(EventArgs e)
{
bValueChanged=true;
this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
base.OnTabIndexChanged(e);
}
#endregion
}
public class DataGridViewMaskedTextBoxCell : DataGridViewTextBoxCell
{
public DataGridViewMaskedTextBoxCell(): base()
{ }
public override Type EditType
{
get { return typeof(DataGridViewMaskedTextBoxEditingControl); }
}
public override object Clone()
{
DataGridViewMaskedTextBoxCell ret = base.Clone() as DataGridViewMaskedTextBoxCell;
if (ret != null)
{
ret.m_strMask = m_strMask;
ret.m_strPromt = m_strPromt;
ret.m_eTextAlign = m_eTextAlign;
}
return ret;
}
string m_strMask;
public string MaskText
{
get { return m_strMask; }
set { m_strMask = value; }
}
char m_strPromt;
public char Promt
{
get { return m_strPromt;}
set { m_strPromt = value; }
}
HorizontalAlignment m_eTextAlign;
public HorizontalAlignment TextAlign
{
get { return m_eTextAlign;}
set { m_eTextAlign = value; }
}
public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
DataGridViewMaskedTextBoxEditingControl ctrl = this.DataGridView.EditingControl as DataGridViewMaskedTextBoxEditingControl;
if (ctrl != null)
{
ctrl.Mask = m_strMask;
ctrl.PromptChar = m_strPromt;
ctrl.TextAlign = m_eTextAlign;
ctrl.Text = initialFormattedValue.ToString();
//ctrl.BorderStyle = BorderStyle.None;
}
}
}
public class DataGridViewMaskedTextBoxColumn : DataGridViewColumn
{
public DataGridViewMaskedTextBoxColumn():base()
{
CellTemplate = new DataGridViewMaskedTextBoxCell();
}
[System.ComponentModel.Editor("System.Windows.Forms.Design.MaskPropertyEditor, System.Design, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor)), System.ComponentModel.DefaultValue("")]
public string Mask
{
get
{
DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
if (Cell != null) return Cell.MaskText;
return "";
}
set
{
DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
if (Cell != null)
Cell.MaskText = value;
}
}
[DefaultValue('\0')]
public char Promt
{
get
{
DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
if (Cell != null) return Cell.Promt;
return '\0';
}
set
{
DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
if (Cell != null)
Cell.Promt = value;
}
}
[DefaultValue(0)]
public HorizontalAlignment TextAlign
{
get{
DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
if (Cell != null) return Cell.TextAlign;
return HorizontalAlignment.Left;}
set
{
DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
if (Cell != null)
Cell.TextAlign = value;
}
}
}
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение