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

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

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

DataGridViewで設定したツールチップを一括削除

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

■100512 / inTopicNo.1)  DataGridViewで設定したツールチップを一括削除
  
□投稿者/ ゆう (4回)-(2022/08/30(Tue) 13:47:41)

分類:[VB.NET/VB2005 以降] 

よろしくお願いします。
現在、visualstudio2019で開発を行っています。

●DataGridViewへツールチップを設定

DataGridView1(0, 0).ToolTipText = "ツールチップ1"
DataGridView1(0, 1).ToolTipText = "ツールチップ2"
DataGridView1(0, 2).ToolTipText = "ツールチップ3"
DataGridView1(1, 0).ToolTipText = "ツールチップ4"
DataGridView1(1, 1).ToolTipText = "ツールチップ5"
DataGridView1(1, 2).ToolTipText = "ツールチップ6"

これらを再設定する為、一度全てのツールチップをクリアしたいです。
下記のようにFor文などで一つ一つクリアしていくしかないのでしょうか

For i = 0 To 1
For ii = 0 To 2
DataGridView1(i, ii).ToolTipText = ""
Next
Next

ご教授いただければ幸いです。
よろしくお願いします。

引用返信 編集キー/
■100513 / inTopicNo.2)  Re[1]: DataGridViewで設定したツールチップを一括削除
□投稿者/ 魔界の仮面弁士 (3451回)-(2022/08/30(Tue) 15:39:34)
No100512 (ゆう さん) に返信
> これらを再設定する為、一度全てのツールチップをクリアしたいです。
> 下記のようにFor文などで一つ一つクリアしていくしかないのでしょうか

ループを使わない…とするならば、CellToolTipTextNeeded イベントで切り替えるとか。


Public Class Form1
  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    DataGridView1.DataSource = CreateSampleDataTable()
    Button1.PerformClick()
  End Sub

  Private toolTips As New Dictionary(Of (x As Integer, y As Integer), String)

  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    toolTips((0, 0)) = "ツールチップ1"
    toolTips((0, 1)) = "ツールチップ2"
    toolTips((0, 2)) = "ツールチップ3"
    toolTips((1, 0)) = "ツールチップ4"
    toolTips((1, 1)) = "ツールチップ5"
    toolTips((1, 2)) = "ツールチップ6"
  End Sub

  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    toolTips.Clear()  '一括で消す
  End Sub
  Private Sub DataGridView1_CellToolTipTextNeeded(sender As Object, e As DataGridViewCellToolTipTextNeededEventArgs) Handles DataGridView1.CellToolTipTextNeeded
    toolTips.TryGetValue((e.ColumnIndex, e.RowIndex), e.ToolTipText)
  End Sub

  Private Function CreateSampleDataTable() As DataTable
    Dim tbl As New DataTable()
    tbl.Columns.Add("C1")
    tbl.Columns.Add("C2")
    tbl.Columns.Add("C3")
    tbl.Columns.Add("C4")
    tbl.Columns.Add("C5")
    tbl.Rows.Add("あ★", "い★", "ウ", "エ", "オ")
    tbl.Rows.Add("か★", "き★", "ク", "ケ", "コ")
    tbl.Rows.Add("さ★", "し★", "ス", "セ", "ソ")
    tbl.AcceptChanges()
    Return tbl
  End Function
End Class
引用返信 編集キー/
■100514 / inTopicNo.3)  Re[2]: DataGridViewで設定したツールチップを一括削除
□投稿者/ ゆう (5回)-(2022/08/30(Tue) 17:31:48)
No100513 (魔界の仮面弁士 さん) に返信
> ■No100512 (ゆう さん) に返信
>>これらを再設定する為、一度全てのツールチップをクリアしたいです。
>>下記のようにFor文などで一つ一つクリアしていくしかないのでしょうか
>
> ループを使わない…とするならば、CellToolTipTextNeeded イベントで切り替えるとか。
>
>
> Public Class Form1
>   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
>     DataGridView1.DataSource = CreateSampleDataTable()
>     Button1.PerformClick()
>   End Sub
>
>   Private toolTips As New Dictionary(Of (x As Integer, y As Integer), String)
>
>   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
>     toolTips((0, 0)) = "ツールチップ1"
>     toolTips((0, 1)) = "ツールチップ2"
>     toolTips((0, 2)) = "ツールチップ3"
>     toolTips((1, 0)) = "ツールチップ4"
>     toolTips((1, 1)) = "ツールチップ5"
>     toolTips((1, 2)) = "ツールチップ6"
>   End Sub
>
>   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
>     toolTips.Clear()  '一括で消す
>   End Sub
>   Private Sub DataGridView1_CellToolTipTextNeeded(sender As Object, e As DataGridViewCellToolTipTextNeededEventArgs) Handles DataGridView1.CellToolTipTextNeeded
>     toolTips.TryGetValue((e.ColumnIndex, e.RowIndex), e.ToolTipText)
>   End Sub
>
>   Private Function CreateSampleDataTable() As DataTable
>     Dim tbl As New DataTable()
>     tbl.Columns.Add("C1")
>     tbl.Columns.Add("C2")
>     tbl.Columns.Add("C3")
>     tbl.Columns.Add("C4")
>     tbl.Columns.Add("C5")
>     tbl.Rows.Add("あ★", "い★", "ウ", "エ", "オ")
>     tbl.Rows.Add("か★", "き★", "ク", "ケ", "コ")
>     tbl.Rows.Add("さ★", "し★", "ス", "セ", "ソ")
>     tbl.AcceptChanges()
>     Return tbl
>   End Function
> End Class

ありがとうございます。
このやり方は良いですね。
サンプルで書いたDGVの行列は少ないですけど、実際動かそうとしているものはもっと行列が多いので、
出来るだけループは避けたいところでした。


解決済み
引用返信 編集キー/
■100515 / inTopicNo.4)  Re[3]: DataGridViewで設定したツールチップを一括削除
□投稿者/ 魔界の仮面弁士 (3452回)-(2022/08/31(Wed) 12:57:33)
No100514 (ゆう さん) に返信
> このやり方は良いですね。

この方法をとる場合の注意点は
・CellToolTipTextNeeded イベントは、データバインド時(または仮想モード時)にしか使えない
・行や列のヘッダー部に対してもイベントが発生する(ColumnIndex や RowIndex が -1 となる)
・特に指定をしない限り、DataGridView は列ヘッダーのクリックや、[F3] キーでソートされる
という点ですね。


ソートの前後で、行番号が変わってしまったり、
AllowUserOrderColumns で列番号が変更してしまうこともあるため、
並び替えがあり得る場合には、「DataGridView 上の行・列の番号」ではなく
「バインド元の行や列」を元に判断する実装の方が良いかもしれません。


Dim dgv = DirectCast(sender, DataGridView)
Dim row As DataRow = TryCast(dgv.Rows(e.RowIndex).DataBoundItem, DataRowView)?.Row
If row IsNot Nothing Then
 Dim colName = dgv.Columns(e.ColumnIndex).DataPropertyName
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ