C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

DataGridViewでのフォーカス制御


(過去ログ 116 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■68441 / inTopicNo.1)  DataGridViewでのフォーカス制御
  
□投稿者/ 裕猫 (72回)-(2013/10/21(Mon) 14:49:19)

分類:[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;
            }
        }
    }
}

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -