Dưới đây là code hướng dẫn để thêm MaskedTextBox vào DataGridView trong C# với
- Form1: form chính của chương trình MaskedTextBoxDGV.
- dataGridView: control DataGridView trên Form1.
- maskedTextBox: biến kiểu control MaskedTextBox sẽ được thêm vào dataGridView.
using System;
using System.Drawing;
using System.Windows.Forms;
namespace MaskedTextBoxGDV
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
MaskedTextBox maskedTextBox;
private void Form1_Load(object sender, EventArgs e)
{
maskedTextBox = new MaskedTextBox
{
Visible = false
};
dataGridView1.Controls.Add(maskedTextBox);
dataGridView1.CellBeginEdit += new DataGridViewCellCancelEventHandler(DataGridView1_CellBeginEdit);
dataGridView1.CellEndEdit += new DataGridViewCellEventHandler(DataGridView1_CellEndEdit);
dataGridView1.Scroll += new ScrollEventHandler(DataGridView1_Scroll);
}
private void DataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
maskedTextBox.Mask = "###-##-##-##"; // Bạn có thể đặt những yêu cầu mình muốn
Rectangle rect = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
maskedTextBox.Location = rect.Location;
maskedTextBox.Size = rect.Size;
maskedTextBox.Text = "";
if (dataGridView1[e.ColumnIndex, e.RowIndex].Value != null)
{
maskedTextBox.Text = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
}
maskedTextBox.Visible = true;
}
private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (maskedTextBox.Visible)
{
dataGridView1.CurrentCell.Value = maskedTextBox.Text;
maskedTextBox.Visible = false;
}
}
private void DataGridView1_Scroll(object sender, ScrollEventArgs e)
{
if (maskedTextBox.Visible)
{
Rectangle rect = dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex, true);
maskedTextBox.Location = rect.Location;
}
}
}
}
Code bổ sung để khắc phục tình trạng maskedTextBox không có Focus:
private void dataGridView1_Paint(object sender, PaintEventArgs e)
{
if (maskedTextBox.Visible && !maskedTextBox.Focused) maskedTextBox.Focus();
}