2

我有一个DataGridView. 我希望它的第一列或任何所需的列(其中包含textboxes)为NUMERIC ONLY. 我目前正在使用此代码:

private void dataGridViewItems_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (dataGridViewItems.CurrentCell.ColumnIndex == dataGridViewItems.Columns["itemID"].Index)
            {
                TextBox itemID = e.Control as TextBox;
                if (itemID != null)
                {
                    itemID.KeyPress += new KeyPressEventHandler(itemID_KeyPress);
                }
            }
        }

private void itemID_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar)
                && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

此代码有效,但问题是所有textboxes列中的所有列都只获取数字。

4

4 回答 4

2

我自己想出来了:)

刚刚删除了解决我的问题的函数开始时的先前事件。

private void dataGridViewItems_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            e.Control.KeyPress -= new KeyPressEventHandler(itemID_KeyPress);//This line of code resolved my issue
            if (dataGridViewItems.CurrentCell.ColumnIndex == dataGridViewItems.Columns["itemID"].Index)
            {
                TextBox itemID = e.Control as TextBox;
                if (itemID != null)
                {
                    itemID.KeyPress += new KeyPressEventHandler(itemID_KeyPress);
                }
            }
        }

private void itemID_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar)
                && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }
于 2013-02-01T03:07:42.583 回答
0

您可以在列表中添加所有数字单元格索引。

像这样:

List<int> list_numeric_columns = new List<int>{ dataGridViewItems.Columns["itemID"].Index};

您在那里添加所有需要的列。

然后,而不是这样做:

if (dataGridViewItems.CurrentCell.ColumnIndex == dataGridViewItems.Columns["itemID"].Index)

你来做这件事:

if (list_numeric_columns.Contains(dataGridViewItems.CurrentCell.ColumnIndex))

那应该行得通。您只需添加一次列..

希望那有帮助

于 2013-01-26T23:06:47.433 回答
0

这是如何EditingControlShowing使用TextBoxKeypress Event

   private void dataGridViewItems_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        var itemID = e.Control as TextBox;
        if (dataGridViewItems.CurrentCell.ColumnIndex ==  1) //Where the ColumnIndex of your "itemID"
        {
            if (itemID != null)
            {
                itemID.KeyPress += new KeyPressEventHandler(itemID_KeyPress);
                itemID.KeyPress -= new KeyPressEventHandler(itemID_KeyPress);
            }
        }
    }

    private void itemID_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar)
            && !char.IsDigit(e.KeyChar))
            e.Handled = true;
    }
于 2013-01-27T00:15:04.623 回答
0

单击您希望为数字的文本框,然后在属性中单击“事件”(看起来像雷声),然后查找“按键”,然后双击然后键入:

if (char.IsNumber(e.KeyChar) || char.IsControl(e.KeyChar))
{
    e.Handled = false;
}
else
{
    e.Handled = true;
}

于 2017-02-19T06:01:07.757 回答