トップ回答者
DataGridViewに対してのToolTipについて

質問
-
現在作成中のフォームに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で 同じ事ができるなら教えて頂けないでしょうか?
回答
-
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
すべての返信
-
DataGridView.ShowCellToolTips プロパティ の影響ですかね。独自にツールチップ使ってるから汎用ツールチップは使えない、のかな?
-
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できないでしょうか?
-
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書いて頂いていた通り これでいけました すっきりしました
ありがとうございます
-
追伸です
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などではパフォーマンスなどのことを考えると 良くないんでしょうか?
-
そもそも、一気に各セルに対して ToolTipText を設定するという状況は DataSource を使っている場合と考えられますし(使っていないのなら行を作成する時についでに設定すれば良いんですから)、そうなるとさっき私が挙げたリンクにもある CellToolTipTextNeeded イベントを使えばいいという事ではないでしょうか。
-
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