VB.NET ToolTipの表示条件について

このQ&Aのポイント
  • VB2010、Winアプリにおいて、TextBoxやLabelコントロールにToolTipを表示させる条件や方法について質問です。
  • 具体的には、TextBoxやLabelコントロールの幅以上のテキストが入力されている場合のみToolTipを表示させたいという要件です。
  • 現在はマウスホバーなどのイベント時に文字数チェックを行って判定していますが、もっとスマートな方法があれば教えていただきたいです。
回答を見る
  • ベストアンサー

VB.NET ToolTipの表示条件について

VB2010、Winアプリ こんにちわ。 フォーム上に存在するTextBoxやLabelコントロールに ToolTipを表示させています。 ToolTipを表示させるための条件とかって設定出来ないんでしょうか? その条件というのは 「TextBoxやLabelコントロールの幅以上のテキストが入力されている」 場合のみToolTipを表示させたいというものです。 思いついた方法としては コントロールの幅と入力文字数を係数として格納しておき MouseのHoverとかのイベント時に文字数チェックを行い その判定により表示するかしないかを決定する、 というものぐらいしか自分には思いつきませんでした。 もっとスマートな方法があれば教えていただければと思います。 よろしくお願いします。。。 (TextBoxのWordWrapプロパティで折り返しを判断しているものを 見れれば楽にできるのかなぁなんて思ったりもしましたが どう判断しているかわからなかったもので。。。)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

固定ピッチフォントなら文字数から計算できると思いますがプロポーショナルフォントの場合は文字数だけでは計算できないでしょう。 TextRender.MesureText を使用するのが比較的簡単ではないかと思います。 MouseHover イベントなり TextChanged イベントなりで Dim s As Size = TextRenderer.MeasureText(TextBox1.Text, TextBox1.Font) If TextBox1.Width < s.Width Then ToolTip1.SetToolTip(TextBox1, TextBox1.Text) Else ToolTip1.SetToolTip(TextBox1, "") End If のようにすると良いと思います。

Rilakkuma_san
質問者

お礼

回答ありがとうございます。 丁寧にソースまで提示していただいて恐縮です。 目的の動作を実装する事が出来ました。 ありがとうございました。

関連するQ&A

  • asp.netでToolTipコントロールを使いたい

    asp.netでの開発初心者です。 asp.netでToolTipコントロールを使いたいと思っています。 [ツールボックス アイテムの選択]で追加できると思い、何度も試しているのですが、 何度チェックマークをいれてOKボタンを押しても、ツールボックスに追加されません(涙) ちなみに、最終的には、ドロップダウンリストのアイテム1行ごとにツールチップの 表示機能をつけられればいいなと思っています。 (アイテムの中に文字数が長く最後まで表示しきれないものが混ざっているため) いろいろ調べてみたところ、ToolTipコントロールを使えばなんとかできそうかな・・・ というところまではわかったのですが。。。 ここ3日間ぐらいずっとToolTipの表示について調べているのですが、もうにっちもさっちも いかない状態です。 どなたかアドバイスお願いします。

  • リッチテキストの折り返しを無効にしたい

    通常のテキストボックスでは幅よりも長い文字が入ると水平スクロールバーが表示されるのですが、複数行を許可したリッチテキストでは、幅よりも長い文字が入ると自動で折り返しが行われてしまいます。 MSDNで検索してもWordWrap属性はありませんでした。 何か簡単な事を見落としているだけだと思うのですが、どなたかご教授願えますようよろしくお願いします。 環境は Visual Basic 6.0 + Microsoft Rich Textbox Control 6.0 プロパティは rtf.MultiLine = True rtf.ScrollBars = 3(Both) を触るくらいしか思いつきませんでした。

  • MultiLine=TrueのTextBoxでEnterキー

    Visual Basic 6.0で、TextBoxでEnterが押されたら次のコントロールへ移動させているのですが、 MultiLine=Trueの場合、TextBox内で改行されてから次のコントロールへ移動してしまいます。 TextBox内で改行されたくはないのですが、何か回避方法はありますか? (10文字分の幅のTextBoxに20文字入力するため、折り返しはされて欲しいのです。)

  • queryのtooltip関連質問です。複数のイメージに別個のtool

    queryのtooltip関連質問です。複数のイメージに別個のtooltipを使用したいのですが、問題は titleに入る文字数が増えた場合、 jqueryのtooltip関連質問です。 http://flowplayer.org/tools/demos/tooltip/index.html 上のページのように複数のイメージに別個のtooltipを使用したいのですが、 問題は titleに入る文字数が増えた場合、 背景画像の範囲を超えて表示されてしまいます。 ここで考えられるのは、別個の背景画像を用意して、 divのidを変える、cssのクラスを変えることでちゃんと分けて表示されると思われますが、 そのやり方では反映されないのです。 (もしくはscript分で処理しないといけないかも知れないような気もしますが...) こちらについて解決できる方はいらっしゃいませんか?!

  • VB.netでメッセージボックスを出さずに本体にメ

    VB.netでメッセージボックスを出さずに本体にメッセージを出そうと思っていますが、 メッセージを出すコントロールとしては何が妥当ですか? メッセージ用のコントロールってありますか? TextBoxとかLabelですか? 30文字のエリアに40文字入れたらスクロールして全体が見れたりする設定って可能ですか?

  • VB2005 Replace 文字の置換え

    逆引き大全500の「183 文字列の中の指定した文字を別の文字に置き換える」の項なのですが・・・ ご存知の方がいらっしゃいましたらよろしくお願い致します。 TextBox1 に「今日は本当に天気が良くて」と入力し、 ボタンを押すと「本当」という漢字を「ホント」というカタカナに 置き換えて Label1 に表示するコードなのですが Dim Text1 As String = TextBox1.Text Label1.Text = Text1.Replace("本当","ホント") という記述になっています。 これで実際に動いたのですが、この記述だと、一文字だけしか置換えできません。 ですが、「本当」だけではなく、「天気」という漢字も「テンキ」というカタカナに置き換えたいのです。 テキストボックスに表示された 「今日は本当に天気が良くて」を一度に 「今日はホントにテンキが良くて」と置き換える方法は ありますでしょうか?よろしくお願い致します。

  • vb6のTEXTBOX

    教えて下さい。 vb6の環境下でTextbox、もしくはLabelのでそれに表示させる文字位置を枠内のセンターに持っていきたいのですが、その方法を教えて下さい。 横方向はプロパティ-でセンターに持っていけるのですが。縦方向がわかりません。教えて下さい。

  • VB.NETでのプログラミングについて

    秒数から「○時間○分○秒」と表示されるプログラムを作りたいと考えています。出来たところまでをご説明致しますと、まずTextBoxを四つとButtonが一つと時間の単位が表示されるLabelを四つ作りました。そして問題のプログラムについてなんですが、TextBox「3600」秒と入力しButtonをクリックすると、他の三つのTextBoxに「1」時間「0」分「0」秒と表示されるといったプログラムを作成したいのです。どうかよろしくお願い致します。

  • VB5でTextBoxを入力不可能にする方法は?

    VisualBasic5で開発を行っているのですが、TextBoxの入力を不可能にする(入力カーソルもそこに移動できない)必要が出てきました。 もちろんEnabledプロパティをFalseにする方法があるのですが、この場合文字の色がグレーに変わってしまいます。 また、Labelを使用するパターンも「入力出来たり、入力不可にする」という取り決めがあるので、使えません。 TextBox内の文字色(BackColorも)をそのままにして、入力を拒絶する方法があれば、どなたか教えてください。 もちろんAPIを使用する方法でもかまいませんので…

  • asp labelコントロールでの折り返し制御

    asp.net デザイン画面でlabelコントロールに文字列を表示しているのですが、 labelの幅を超える文字列をセットすると自動で折り返してしまいます。 labelコントロール折り返し制御はできないのでしょうか?

専門家に質問してみよう