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

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

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

Re[11]: ToolTipウィンドウの表示位置変更方法について


(過去ログ 10 を表示中)

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

■1692 / inTopicNo.1)  ToolTipウィンドウの表示位置変更方法について
  
□投稿者/ M.K (1回)-(2007/03/02(Fri) 19:21:11)

分類:[C# (Windows)] 

開発環境:VS2005 (WindowsXP SP2)
使用言語:C#

初めて投稿させて頂きます、M.Kと申します。

現在 .NET Framework2.0 を使用してWindowsアプリケーションを開発しているのですが、
ToolTipクラスによって表示されるツールチップの表示タイミングは標準のままに、表示位置
だけ任意に変更したいのですが、どのようにコーディングすれば良いのかが分かりません。

何方か実現方法をご存知でしたら教えて頂けませんでしょうか?

※具体的にはテキストボックスにマウスカーソルを当てて暫く待つと(標準仕様)、テキスト
 ボックスの左下を起点にツールチップを表示(独自仕様)させたいのです。
引用返信 編集キー/
■1694 / inTopicNo.2)  Re[1]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ ダッチ (113回)-(2007/03/02(Fri) 21:20:28)
M.K さん、こんにちは
ダッチです。

> ToolTipクラスによって表示されるツールチップの表示タイミングは標準のままに
ToolTip.Popup イベントで

> 表示位置だけ任意に変更したいのですが
ToolTip.Show メソッド を呼んでみてはいかがでしょうか。
表示位置を指定する引数があります。

引用返信 編集キー/
■1734 / inTopicNo.3)  Re[2]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ M.K (2回)-(2007/03/05(Mon) 10:16:01)
No1694 (ダッチ さん) に返信

ダッチさん、お返事ありがとうございます。

開発環境が会社にしかないので、検証とお返事に日を開けてしまい
申し訳ありません。

> ToolTip.Popup イベントで
> ToolTip.Show メソッド を呼んでみてはいかがでしょうか。

PopupイベントでShowメソッドを呼ぶように記述した所、再帰的に
Popupイベントが発生してしまい、最終的にStackOverflowとなって
しまいます。

private void toolTip1_Popup(object sender, PopupEventArgs e)
{
   toolTip1.Show("あいうえお", button1, 0, 0);  // ← 0,0は例です。
}

もし宜しければサンプルコードなどを挙げて頂けないでしょうか?

引用返信 編集キー/
■1736 / inTopicNo.4)  Re[3]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ Hirotow (51回)-(2007/03/05(Mon) 10:32:20)
Hirotow さんの Web サイト
No1734 (M.K さん) に返信
> ■No1694 (ダッチ さん) に返信
>
> ダッチさん、お返事ありがとうございます。
>
> 開発環境が会社にしかないので、検証とお返事に日を開けてしまい
> 申し訳ありません。
>
>>ToolTip.Popup イベントで
>>ToolTip.Show メソッド を呼んでみてはいかがでしょうか。
>
> PopupイベントでShowメソッドを呼ぶように記述した所、再帰的に
> Popupイベントが発生してしまい、最終的にStackOverflowとなって
> しまいます。
>
> private void toolTip1_Popup(object sender, PopupEventArgs e)
> {
> toolTip1.Show("あいうえお", button1, 0, 0); // ← 0,0は例です。
> }
>
> もし宜しければサンプルコードなどを挙げて頂けないでしょうか?
>
対処療法的ですが、
いったんHide()すればShow()しても大丈夫だと思います。
引用返信 編集キー/
■1746 / inTopicNo.5)  Re[4]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ M.K (3回)-(2007/03/05(Mon) 15:25:13)
No1736 (Hirotow さん) に返信

> 対処療法的ですが、
> いったんHide()すればShow()しても大丈夫だと思います。

Hirotowさん、返信ありがとうございます。

いったんHide()してShow()と言うのは以下のようなコーディングを指すので
しょうか?

private void toolTip1_Popup(object sender, PopupEventArgs e)
{
   toolTip1.Hide(button1);
   toolTip1.Show("あいうえお", button1, 0, 0);  // ← 0,0は例です。
}

この方法ですとツールチップが表示→消滅→表示→消滅と点滅が繰り返され
てしまうのですが、Hide()メソッドを記述するイベントや位置が違うのでしょうか?


これはあくまで私見なのですが、Popupイベントは"表示前"に発生する様なので
その中でShow()メソッドを実行すると、それに反応して別のPopupイベントが
発生してしまい、無限ループっぽくなってOverflowが発生するものと考えます。

更にPopupイベント内でHide()メソッドを実行した場合、初回のイベントでは
非表示の対象となるツールチップが表示されておらず、再帰的に発生する2回目
以降のイベントで、前回のイベント時に表示されたツールチップを非表示としま
すが、すぐさま次のShow()メソッドが実行されるため、結果的にツールチップが
点滅している物と思われます。


自分でももう少し調査してみますが、他の方法をご存知の方がいらっしゃいまし
たら、引き続き宜しくお願いします。

引用返信 編集キー/
■1748 / inTopicNo.6)  Re[5]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ シャノン (96回)-(2007/03/05(Mon) 15:44:47)
2007/03/05(Mon) 15:45:28 編集(投稿者)

No1746 (M.K さん) に返信
> 自分でももう少し調査してみますが、他の方法をご存知の方がいらっしゃいまし
> たら、引き続き宜しくお願いします。

Hide ではなく、e.Cancel = true で表示をキャンセルしてから Show してみるとか?
#試してないのでテキトーなこと言ってます。
#というか、なんで ToolTip のサイズは変えられるのに位置は変えられねぇんだよ…
引用返信 編集キー/
■1754 / inTopicNo.7)  Re[6]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ Hirotow (53回)-(2007/03/05(Mon) 16:22:45)
Hirotow さんの Web サイト
> Hide ではなく、e.Cancel = true で表示をキャンセルしてから Show してみるとか?
> #試してないのでテキトーなこと言ってます。
> #というか、なんで ToolTip のサイズは変えられるのに位置は変えられねぇんだよ…

そっちのほうが正解かもしれませんね。

# 正攻法は継承してオーバーライドかもしれない。
引用返信 編集キー/
■1770 / inTopicNo.8)  Re[7]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ ダッチ (114回)-(2007/03/05(Mon) 22:05:27)
> もし宜しければサンプルコードなどを挙げて頂けないでしょうか?
M.K さんと同じですよ。
ただ私の環境では、Popup イベントが 13回連続で来た後に、イベントがこなくなっていました。
そのため、例外も発生しませんでした。

しかし、Popup イベントが連続してきているため、この方法ではダメですね。
すみません。

> # 正攻法は継承してオーバーライドかもしれない。
これでいけるならこれが良いですね。

後は、もう一つ別の ToolTip を用意して、
Popup イベントで e.Cancel = True して一つ目はキャンセルし、
そのイベントの中で別の ToolTip を表示するとか。

用は、ToolTip の表示タイミングをどうするかですね。
引用返信 編集キー/
■1774 / inTopicNo.9)  Re[8]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ Hirotow (58回)-(2007/03/06(Tue) 00:30:20)
Hirotow さんの Web サイト
> 後は、もう一つ別の ToolTip を用意して、
> Popup イベントで e.Cancel = True して一つ目はキャンセルし、
> そのイベントの中で別の ToolTip を表示するとか。

Popupイベントからはどのコントロールか判別できないところがネックですね。

私としては、対象コントロールのToolTipEnabledをfalseにしておき、MouseOverイベントで(必要に応じてタイマー処理をして)対象コントロールの位置渡してツールチップを表示すればどうかなと思います。
引用返信 編集キー/
■1775 / inTopicNo.10)  Re[9]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ みーしん (1回)-(2007/03/06(Tue) 01:41:12)
2007/03/06(Tue) 01:51:30 編集(投稿者)
2007/03/06(Tue) 01:46:55 編集(投稿者)


うん、やっぱりテキストボックスぐらいなら継承してプロパティ(ToolString)なんか取り付けて。

MouseHoverなどでそのプロパティを拾って表示して。
   ’時間計測など付ける
  Me.ToolTip1.Show(CType(sender, Classtxt).toolstring, Me, New Point(CType(sender, classtxt).Location))

MouseLeaveでHide(Me)

  Me.ToolTip1.Hide(Me)

VBですけど。







引用返信 編集キー/
■1779 / inTopicNo.11)  Re[10]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ M.K (4回)-(2007/03/06(Tue) 10:20:35)
あれから私の方でもToolTipのソースなどを参考にあれこれ考えては見たのですが、
やはりToolTip単体で且つ必要最低限の加修で要件を満たす事は出来ませんでした。

シャノンさんの仰るようにPopupEventArgsクラスにTopとLeftが有って、それに値を
指定すると位置を任意に変更できる…とか出来れば最高だったのですが、世の中そう
都合のいい事ばかりでは有りませんよね。

ダッチさんのToolTipを2つ使う方法や、HirotowさんやみーしんさんのMouseHover
イベントで独自のタイマーを起動し、標準のツールチップ表示動作を模倣する動作
も手法として的を射ているのですが、要件を実現する為のコストが少しかかりそう
なので、今回はToolTipを継承したコンポーネントを作成し、Show()メソッドか何か
をオーバーライドして任意の位置に表示できるような物を作成するか、要件の見直
し(振り出しに戻る^^;)をかけていきたいと思います。

返信を下さった皆さん、ありがとうございました。
解決済み
引用返信 編集キー/
■1781 / inTopicNo.12)  Re[11]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ シャノン (100回)-(2007/03/06(Tue) 11:06:43)
No1779 (M.K さん) に返信
> あれから私の方でもToolTipのソースなどを参考にあれこれ考えては見たのですが、
> やはりToolTip単体で且つ必要最低限の加修で要件を満たす事は出来ませんでした。
>
> シャノンさんの仰るようにPopupEventArgsクラスにTopとLeftが有って、それに値を
> 指定すると位置を任意に変更できる…とか出来れば最高だったのですが、世の中そう
> 都合のいい事ばかりでは有りませんよね。

Win32 API の ToolTip は、それ自体が立派なウィンドウなんですよね。
だから、マネージドの Popup イベントに相当するであろう、Win32 API の TTN_SHOW 通知では、メッセージの引数としてツールチップのサイズは渡されません。
ウィンドウハンドルさえあれば、ウィンドウの位置、サイズの取得、設定ともに自在にできるからですね。

しかし、.NET の ToolTip は Control ではなく Component。フォーム上に配置するものではないからでしょうが…
sender.Move( ... ); とかできるかと思ったらできませんでしたorz
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -