DOBON.NET DOBON.NETプログラミング掲示板過去ログ

datagridで表示し切れていない情報をtooltip表示

環境/言語:[C#,XP,1.1]
分類:[.NET]

再質問させて頂きます。
よろしくおねがいします(__)


datagrid上でマウスの動きを見て、マウス下の行のテキストが表示し切れていない場合は、tooltipで表示したいのですが、どうしたらいいでしょうか。
■No11949に返信(actさんの記事)
マウス下の行のテキストの幅を求めて
http://dobon.net/vb/dotnet/graphics/measurestring.html
データグリッドのカラムの幅と比較すればどうにかなるのでは?
なるほど、ありがとうございます。
マウスが何行目にあるかとかはどのように取得すればいいでしょうか。
よろしくお願いします(__)
すいません。 家族のPCから投稿したため、名前が変わってしまいました。
■No11993に返信(kiddさんの記事)
>マウスが何行目にあるかとかはどのように取得すればいいでしょうか
http://dobon.net/vb/dotnet/datagrid/hittest.html
せめて自分がお世話になってるサイトのサンプルに1回通り
目を通そうよ。
すいません(__)見たつもりになっていました。
取得する方法はわかったので、実際に表示させようとしたのですが、
toolTip1.SetToolTip(dataGrid1, ((element.eleRow)data.ele.Rows[hti.Row]).text);
こんな感じで設定していますが、datagridのセル上ではtooltipが表示されません。
セルがない灰色のところでは表示されるみたいです。
listviewのサンプルみたいに、セル別に登録するのかと思い、真似してやってみましたが、キャストがうまくいきません。
どうしたらいいでしょうか。
よろしくお願いします(__)
なんかおかしいなぁと思い、datagridだけのシンプルなサンプルを作って、tooltipを表示させてみたら、できました。
表示されなかった原因は、Dobon Tipsでも紹介されているコンボボックスやdatetimepickerの列を表示させているからかなとおもいます。
どうやったら、独自列でもtooltipを表示させることができるでしょうか、
よろしくお願いします。
独自列のせいみるために、適当なdatagridを作って試してみました。
以下のように、どのセルにいるかがtooltipで表示するように書いてみました。
 Dim last_hti As System.Windows.Forms.DataGrid.HitTestInfo
Private Sub DataGrid1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseMove

        

        If Not ToolTip1 Is Nothing Then


            'マウスポインタのスクリーン座標をクライアント座標に変換
            Dim p As Point = DataGrid1.PointToClient(Cursor.Position)
            '座標位置の情報を取得
            Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
            hti = DataGrid1.HitTest(p)
            'ポイントされているアイテムが変わった時
            If Not hti Is last_hti Then


                'アクティブを解除
                If ToolTip1.Active Then ToolTip1.Active = False

                If Not hti Is Nothing Then


                    'ToolTipのテキストを設定しなおす
                    ToolTip1.SetToolTip(DataGrid1, hti.Row.ToString() & "行" & hti.Column & "列")
                    'ToolTipを再びアクティブにする
                    ToolTip1.Active = True

                End If


                'ポイントされているアイテムを記憶する
                last_hti = hti
            End If
        End If


が、セルが表示されていない、-1行-1列しかtooltipが表示されませんでした。
なぜだかわかりません。
ご教授ください。
よろしくお願いします(__)
2005/08/05(Fri) 09:55:20 編集(投稿者)

■No12070に返信(actさんの記事)
それぞれのプロパティを変更した時の動作を個別に
テストするようなプログラムを作ってテストすれば
原因が分かります。

ToolTip.Active プロパティを False に設定した後、
True に戻しても ToolTip は表示されず、マウスが
動いた時点で表示されました。しかし、提示された
プログラムではマウスが動いた時点でまた False に
設定されてますので、表示される事はありません。

[VB.NET]テストプログラム
ボタンを押下後、DataGrid1 上でカーソルを待機させて下さい。
    Private mActiveFalseFlag As Boolean
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Me.Timer1.Stop()
        If Me.mActiveFalseFlag Then
            Me.ToolTip1.Active = False
            Debug.WriteLine("Active = False")
            Me.mActiveFalseFlag = False
            Me.Timer1.Interval = 5000
            Me.Timer1.Start()
        Else
            Me.ToolTip1.Active = True
            Debug.WriteLine("Active = True")
        End If
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.mActiveFalseFlag = True
        Me.Timer1.Interval = 5000
        Me.Timer1.Start()
    End Sub
なるほど! ありがとうございます。
るしぇさんがおっしゃるように組み直してみたところ、
サンプルでは無事セル別にtooltipを表示させることができました。
そして、同じように本題のソフトに書いてみたところ、
vbとC#の違いがあるものの、tooltipが表示されませんでした。
デバッグしてみるとちゃんと、セルが変わるとそのセルの情報を取得して、tooltipにセットしているのですが、tooltipは表示されません。
やっぱり、独自列が原因なのかなぁと思い、サンプルの方にも独自列をいれてみたら、関係なく表示されました。
本題のソフトの怪しいところを見ていったら
this.ShowInTaskbar = false;
this.WindowState = FormWindowState.Minimized;
として、起動時はフォームを表示しないようにしていたのですが、
これをはずしたら表示されるようになりました。

表示する時
this.ShowInTaskbar = true;
this.WindowState = FormWindowState.Normal;
this.Show();
隠すとき
Application.DoEvents();
ShowInTaskbar = false;
this.Hide();
のようにしていました。

起動時にはフォームを隠しておきたいのですが、
いい方法はないでしょうか。
よろしくお願いします(__)
notifyiconを使い、表示/非表示をしています。
http://homepage3.nifty.com/midori_no_bike/CS/form.html
↑のタスク常駐アプリのエントリを参考にしてできました。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板