tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB2008でDataGriedView
記事No10785
投稿日: 2012/04/28(Sat) 09:20
投稿者もと
いつもお世話になります。
今、VB2008でフォームを作成しております。
テキストボックス1(tabindex:0)
DataGridView( Enterキーでセルの横移動可能 tabindex:1)
テキストボックス2(tabIndex:2)

DataGridViewは4列×10行
です。

教えていただきたいことが3つあります。
@起動したときにカーソルはテキストボックス1にありますが、DataGridviewの最初のセルが選択状態になっているのを解除したい

ADataGridViewの1列目の入力がなければテキストボックス2へFocusがしたい

BDataGridViewで最後のセルの入力が終わればテキストボックス2へFocusがしたい

DataGridViewを使い出してまだ日が浅いので教えてください。

[ツリー表示へ]
タイトルRe: VB2008でDataGriedView
記事No10786
投稿日: 2012/04/30(Mon) 00:43
投稿者VBレスキュー(花ちゃん)
> @起動したときにカーソルはテキストボックス1にありますが、DataGridviewの最初のセルが選択状態になっているのを解除したい

ここの DataGridView 関係の Tips に記載がありませんでしたか? それではだめとか。

> ADataGridViewの1列目の入力がなければテキストボックス2へFocusがしたい
やりたい事は、解りましたが、それでどの部分が知りたいのでしょうか?
1列目?、セルが "" かどうか、Focus の移動の仕方、etc

> BDataGridViewで最後のセルの入力が終わればテキストボックス2へFocusがしたい
現在のセルが最後の行の最後の列かどうかを調べればいいのでは、Enter キーでセルの
移動を実装しているならその位解っているはずでは。?

その辺の事も同様に、Tips 集にヒントなりがあるかと。

[ツリー表示へ]
タイトルRe^2: VB2008でDataGriedView
記事No10787
投稿日: 2012/05/01(Tue) 21:10
投稿者もと
ありがとうございます。A、BはFormのKeyDownイベントでActiveCellを事前に取得して遷移できました。
@はもう一度検索してみます。
花ちゃんさんにもう一つ教えてほしいですけどDataGridView1_CellValidatingで入力チェックをしています。正常値のときに列を隣でなく、2つ先に飛ばしてあげたいのですがこの場合にFormのKeyDownイベントを通らないのようです。DataGridView1_CellValidating内でどのようにコーディングすればいいのでしょうか?

[ツリー表示へ]
タイトルRe^3: VB2008でDataGriedView
記事No10788
投稿日: 2012/05/01(Tue) 23:13
投稿者VBレスキュー(花ちゃん)
> @はもう一度検索してみます。
検索しなくてもここの DataGridView 関係のメニューの DataGridView Tips集
(セルに関する操作関係色々) の中の No.9 がそのものずばりではないですかとこの前も
書いたつもりですが。  
http://www.hanatyan.sakura.ne.jp/dotnet/datagridview.htm

> 花ちゃんさんにもう一つ教えてほしいですけどDataGridView1_CellValidatingで
>入力チェックをしています。
>正常値のときに列を隣でなく、2つ先に飛ばしてあげたいのですがこの場合に
>FormのKeyDownイベントを通らないのようです。

意味がよく解りません。順を追って初めから説明して頂かないと、入力チェックはできて
いるのですよね、その時に、移動処理ができないのですか?
FormのKeyDownイベント とはどのような関係があるのですか?
DataGridView がForm上にいくつも貼り付けてあるのですか?
DataGridView1 の事なら、DataGridView1 の イベントで処理すべきでは。

[ツリー表示へ]
タイトルありがとうございます。
記事No10789
投稿日: 2012/05/02(Wed) 08:45
投稿者もと
入力チェックはDataGridView1でできており、エラー時はセルから遷移しないようにしています。
正常値のときに右へ移動でなく、2つ右へ移動したいのですが。
どのイベントに書いていいのかわからない状態です。
入力チェックはDataGridView1_CellValidatingイベントで記入しています。

    Private Sub DataGridView1_CellValidating(ByVal sender As Object, _
        ByVal e As DataGridViewCellValidatingEventArgs) _
        Handles DataGridView1.CellValidating

        Dim dgv As DataGridView = DirectCast(sender, DataGridView)

        Dim test As String

        '現在のセル位置を記憶しておく
    pvActive_Col = DataGridView1.CurrentCell.ColumnIndex
        PvActive_Row = DataGridView1.CurrentCell.RowIndex

        '新しい行のセルでなく、セルの内容が変更されている時だけ検証する
        If e.RowIndex = dgv.NewRowIndex OrElse Not dgv.IsCurrentCellDirty Then
            Exit Sub
        End If

        e.Cancel = False

        '入力チェック
        Select Case dgv.Columns(e.ColumnIndex).Name

            Case "SHCODE"
                  If e.FormattedValue.ToString() ="123" Then
                    MsgBox("入力した商品bヘエラーです。”)
                    '入力した値をキャンセルして元に戻すには、次のようにする
                    dgv.CancelEdit()
                    'キャンセルする
                    e.Cancel = True
                    Exit Sub
                 Else
          '正常値なら右隣のセルに名称を表示
                    e.Cancel = False
                   DataGridView1(pvActive_Col + 1, pvActive_Row).Value ="商品名"           '******ここで名称の右へ遷移したいのです。
                End If

        End Select

        Exit Sub

    End Sub

[ツリー表示へ]
タイトルRe: ありがとうございます【修正】
記事No10790
投稿日: 2012/05/02(Wed) 12:57
投稿者VBレスキュー(花ちゃん)
>                    DataGridView1(pvActive_Col + 1, pvActive_Row).Value ="商品名"           '******ここで名称の右へ遷移したいのです。


無限ループになる可能性がありますので、列を固定するようにして下記のように
TAB キーを送ってやれば移動する事ができますが、もと さんの環境(仕様)上で実装した
場合はどうか試して見て下さい。

   If  pvActive_Col = 1 Then
      System.Windows.Forms.SendKeys.Send("{TAB}")
      System.Windows.Forms.SendKeys.Send("{TAB}")
   End If

[ツリー表示へ]
タイトルありがとうございます。
記事No10791
投稿日: 2012/05/03(Thu) 08:39
投稿者もと
花ちゃんさんありがとうございます。
'******ここで名称の右へ遷移したいのです。****
のところで掲示する前に
 DataGridView1.CurrentCell = DataGridView1(名称の右のセル列, 行)
を指定しているのですが実際には移動しませんでした。
Enter時に右へ移動するDataGridコントロールを作成しているのに問題あるのでしょうか?
-------------------
If  pvActive_Col = 1 Then
      System.Windows.Forms.SendKeys.Send("{TAB}")
      System.Windows.Forms.SendKeys.Send("{TAB}")
End If
------------------
はこれから実装してみます。

[ツリー表示へ]
タイトルRe: ありがとうございます。
記事No10793
投稿日: 2012/05/04(Fri) 11:53
投稿者もと
実装しましたが3つ先に移動してしまいました。
名称のセルはReadOnlyなので、ReadOnlyのセル、ボタンのセルに遷移しないようにできないでしょうか?

[ツリー表示へ]
タイトルRe^2: ありがとうございます。
記事No10802
投稿日: 2012/05/09(Wed) 08:49
投稿者もと
なんとか解決しました。四苦八苦なのでどう改良したか表現できないほどです。

[ツリー表示へ]