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();
}

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *