none
DataGridViewに対してのToolTipについて RRS feed

  • 質問

  •  現在作成中のフォームにToolTipを付けているんですが なぜか

     DataGridViewにだけはToolTipがつけられません DataGridには付けられるんですが 2003までにあったコントロールでないと 付けられないんでしょうか?

       Dim too As New ToolTip()

            too.AutoPopDelay = 10000
            too.InitialDelay = 10
            too.ReshowDelay = 10
            too.ShowAlways = True
            Dim txt As String
           
                txt = "データをクリックすると自動で入力されます"
                Too.SetToolTip(DataGridView1, txt)

     特にコンパイルエラーなどは出ないんですが

     もし DataGridViewで 同じ事ができるなら教えて頂けないでしょうか?

    2006年7月25日 11:31

回答

  •  Hongliangさん ありがとうございます

     使ってみました 問題なく作動しました

    これだと パフォーマンスとか気にしなくて済みそうです

    ありがとうございました

       Private Sub View2_CellToolTipTextNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellToolTipTextNeededEventArgs) Handles View2.CellToolTipTextNeeded
            If e.RowIndex > -1 Then
                Dim dataGridViewRow1 As DataGridViewRow = View2.Rows(e.RowIndex)
                e.ToolTipText = "AAAA"
            End If
        End Sub

    2006年7月25日 23:24

すべての返信

  • DataGridView.ShowCellToolTips プロパティ の影響ですかね。独自にツールチップ使ってるから汎用ツールチップは使えない、のかな?

    2006年7月25日 11:51
  •   Hongliangさんありがとうございます

       やっぱり 普通には付けられないんですね

               Dim txt as string ="テスト"

        Dim ce As DataGridViewCell = DataGridView.Item(0, 0)
                ce.ToolTipText = txt

         これで 一つのセルにはToolTipをつけられたのですが これを全てのセルに貼り付ける事になるんでしょうか?

      もし そうだとしたらDataGridViewのセルでFor eachしたいのですが セルのコレクションのようなものが分かりません

      Cellsのようなものがあればと思うのですが MSDNなどを見ても見当たりません

      Do Loopなら一応わかるのですが For eachできないでしょうか?

    2006年7月25日 12:46
  • こんな感じでできると思います。

    For Each row As DataGridViewRow In DataGridView1.Rows
        For Each cell As DataGridViewCell In row.Cells

        Next
    Next

    2006年7月25日 13:38
    モデレータ
  •  trapemiya さんありがとうございます

     できました

                Dim cc As Integer = View2.Columns.Count
                Dim rc As Integer = View2.Rows.Count
                Dim c As Integer
                Dim r As Integer
                Do
                    r = 0
                    Do
                        Dim ce As DataGridViewCell = View2.Item(c, r)
                        ce.ToolTipText = txt
                        r += 1
                    Loop Until r >= rc
                    c += 1
                Loop Until c >= cc

     こんな感じで書いてたのですが

                For Each ro As DataGridViewRow In View2.Rows
                    For Each ce As DataGridViewCell In ro.Cells
                        ce.ToolTipText = txt
                    Next
                Next

     書いて頂いていた通り これでいけました すっきりしました

     ありがとうございます

     

     

    2006年7月25日 13:51
  •  追伸です

                For Each ro As DataGridViewRow In View2.Rows
                    ro.HeaderCell.ToolTipText = txt
                    For Each ce As DataGridViewCell In ro.Cells
                        ce.ToolTipText = txt
                    Next
                Next
                For Each co As DataGridViewColumn In View2.Columns
                    co.HeaderCell.ToolTipText = txt
                Next

     つでに こんな感じにしてみましたが データ数の多いViewなどではパフォーマンスなどのことを考えると 良くないんでしょうか?

    2006年7月25日 14:00
  • そもそも、一気に各セルに対して ToolTipText を設定するという状況は DataSource を使っている場合と考えられますし(使っていないのなら行を作成する時についでに設定すれば良いんですから)、そうなるとさっき私が挙げたリンクにもある CellToolTipTextNeeded イベントを使えばいいという事ではないでしょうか。

    2006年7月25日 14:22
  •  Hongliangさん ありがとうございます

     使ってみました 問題なく作動しました

    これだと パフォーマンスとか気にしなくて済みそうです

    ありがとうございました

       Private Sub View2_CellToolTipTextNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellToolTipTextNeededEventArgs) Handles View2.CellToolTipTextNeeded
            If e.RowIndex > -1 Then
                Dim dataGridViewRow1 As DataGridViewRow = View2.Rows(e.RowIndex)
                e.ToolTipText = "AAAA"
            End If
        End Sub

    2006年7月25日 23:24