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

使い方は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

すべての数値セルのインデックスをリストに追加できます。

このような:

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 に答える