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

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

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

Re[2]: DataGridViewで条件によってセルを移動


(過去ログ 141 を表示中)

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

■82685 / inTopicNo.1)  DataGridViewで条件によってセルを移動
  
□投稿者/ ぽっと (3回)-(2017/01/26(Thu) 17:06:42)

分類:[C#] 

お世話になっております。
DataGridViewで以下のようなものを実現したいのですがうまくいきません。
1.Enterキーで横移動を可能とする。
2.値を入力後に文字数がMaxLengthとなった場合次のセルに移動
横移動はMoveFocusメソッドでReadonlyの場合は次の横のセルをフォーカスするようにしています。

以下のプログラムでうまく動作しない点は
2をテキストボックスのKeyUpイベントで実装しているのですが
既にMaxLengthとなっているテキストボックスを選択し全角でキーを入力すると次のセルに移動してしまいます。
例えば「あ」と打つと変換確定しない前から次のセルに移動してしまう。
これを「あ」と入力後に変換確定後に移動としたいのですが、良い方法ないでしょうか。

        [System.Security.Permissions.UIPermission(
        System.Security.Permissions.SecurityAction.Demand,
        Window = System.Security.Permissions.UIPermissionWindow.AllWindows)]
        protected override bool ProcessDialogKey(Keys keyData)
        {
            if ((keyData & Keys.KeyCode) == Keys.Enter)
            {
                return false;
            }
            return base.ProcessDialogKey(keyData);
        }

        [System.Security.Permissions.SecurityPermission(
            System.Security.Permissions.SecurityAction.Demand,
            Flags = System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
        protected override bool ProcessDataGridViewKey(KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                MoveFocus();	// 次のセルにフォーカスを移動します。
                return false;
            }
            return base.ProcessDataGridViewKey(e);
        }

        private void dataGridViewTextBox_KeyUp(object sender,
            KeyEventArgs e)
        {
            if (tb.Text.Length == tb.MaxLength)
            {
               MoveFocus();	// 次のセルにフォーカスを移動します。
            }
        }

        private void MoveFocus()
        {
            int row = this.CurrentCell.RowIndex;
            int column = this.CurrentCell.ColumnIndex;
            MovefocusSub(ref row, ref column);
            this.CurrentCell = this[column, row];
        }

        private void MovefocusSub(ref int row, ref int column)
        {
            column++;
            if (this.ColumnCount <= column)
            {
                row++;
                column = 2;
            }
            if (this[column, row].ReadOnly)
            {
                MovefocusSub(ref row, ref column);
            }
        }

引用返信 編集キー/
■82687 / inTopicNo.2)  Re[1]: DataGridViewで条件によってセルを移動
□投稿者/ 魔界の仮面弁士 (1086回)-(2017/01/26(Thu) 17:27:11)
No82685 (ぽっと さん) に返信
> 2をテキストボックスのKeyUpイベントで実装しているのですが

手書き文字入力や音声認識入力の場合は大丈夫でしょうか。


> これを「あ」と入力後に変換確定後に移動としたいのですが、良い方法ないでしょうか。

確定後なら、TextChanged だと思います。
DataGridView の EditingControl 上で試したわけでは無いですが。
引用返信 編集キー/
■82697 / inTopicNo.3)  Re[2]: DataGridViewで条件によってセルを移動
□投稿者/ ぽっと (1回)-(2017/01/27(Fri) 14:23:34)
魔界の仮面弁士様ご回答ありがとうございます。

> 手書き文字入力や音声認識入力の場合は大丈夫でしょうか。
手書き文字入力や音声認識入力はありません。

>>これを「あ」と入力後に変換確定後に移動としたいのですが、良い方法ないでしょうか。
> 確定後なら、TextChanged だと思います。
> DataGridView の EditingControl 上で試したわけでは無いですが。
TextChangedですとセルにフォーカスが移った時に発生してしまい文字が入力できなくなります。

いろいろ試してみます。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -