|
分類:[C#]
開発環境 Windows7Pro VisualStudio2008 C#
DataGridView1でCell[0]でEnterで選択したとき、Cell[0]を*にし、Cell[2]に移動。Cell[2]で金額を入力したらフォーカスが下の段のCell[0]へ移動するという動作をさせたいと考えています。Cell[0]での上下の移動は↓↑キーにて移動します。
ここで問題なのですが、Cell[2]で金額を入力すると選択が一段下に下がり、もう一度Enterを押さないと下の段のCell[0]に移動しません。
又、Cell[0]の選択マーク*を解除するのにDeleteキーが使えず、スペースで消しますが、スペース+Enterをしないでスペース+↑(↓)だとCountの値が加算、減算されません。
解決策として 文字入力+Enterで勝手にフォーカスが1行下にならなければいいのですが。
又、文字入力時のEnterキーをdataGridView1_KeyDownが拾っていない感じです。これを回避するにはなにか方法があるでしょうか?
ご存知の方、教えていただけないでしょうか?よろしくお願いいたします。
以下テストプログラムのソースです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private int Count = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.ColumnCount = 4;
dataGridView1.Columns[0].Name = "フラグ";
dataGridView1.Columns[1].Name = "品番";
dataGridView1.Columns[2].Name = "数量";
dataGridView1.Columns[3].Name = "摘要";
object[] OJ = new object[4];
for (int CT2 = 0; CT2 < 10; CT2++)
{
for (int CT1 = 0; CT1 < 4; CT1++) { OJ[CT1] = null; }
dataGridView1.Rows.Add(OJ);
}
dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];
}
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
int CELLNO = dataGridView1.CurrentCell.ColumnIndex;
switch (e.KeyCode)
{
case Keys.Enter:
e.Handled = true;
if (CELLNO == 0)
{
dataGridView1.Rows[Count].Cells[0].Value = "*";
dataGridView1.CurrentCell = dataGridView1.Rows[Count].Cells[2];
}
else
{
Count++;
if (Count == dataGridView1.Rows.Count) { Count = dataGridView1.Rows.Count - 1; }
dataGridView1.CurrentCell = dataGridView1.Rows[Count].Cells[0];
}
break;
case Keys.Up:
Count--;
if (Count < 0) { Count = 0; }
break;
case Keys.Down:
Count++;
if (Count == dataGridView1.Rows.Count) { Count = dataGridView1.Rows.Count - 1; }
break;
default:
break;
}
}
}
}
|