- PR -

ToolTipが2回目から表示されない

1
投稿者投稿内容
Diosan
常連さん
会議室デビュー日: 2006/07/27
投稿数: 29
お住まい・勤務地: 静岡
投稿日時: 2007-06-05 11:43
今、ToolTipを張り付けたUserControlがあります。
このクラスのインスタンスを親フォームのメンバとして持っておいて、
子フォームに子フォームの表示時に追加しようとしています。

初回の子フォーム表示時はきちんとツールチップが表示されるのですが、2回目から
はツールチップが表示されなくなります。 これはどうしてなのでしょうか?

以下、ミニマムコードです。

コード:
// 親フォーム
public partial class Form1 : Form
{
  // ツールチップを付けたコントロール
  TestControl _testCtrl = new TestControl();
  
  ・・・
  private void button1_Click(object sender, EventArgs e)
  {
    using (ChildForm form = new ChildForm())
    {
      form.AddTestControl(_testCtrl);
      form.ShowDialog();
    }
  }
}

// 子フォーム
public partial class ChildForm : Form
{
   ・・・
  internal void AddTestControl(TestControl testCtrl)
  {
    testCtrl.Dock = DockStyle.Fill;
    this.Controls.Add(testCtrl);
  }

  private void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
  {
     this.Controls.Clear();
  }
}

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-05 11:59
引用:

Diosanさんの書き込み (2007-06-05 11:43) より:

初回の子フォーム表示時はきちんとツールチップが表示されるのですが、2回目から
はツールチップが表示されなくなります。これはどうしてなのでしょうか?


再現しないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Diosan
常連さん
会議室デビュー日: 2006/07/27
投稿数: 29
お住まい・勤務地: 静岡
投稿日時: 2007-06-05 12:11
じゃんぬねっとさん。
そうですか。再現しないですか。

こちらのローカルな問題なのかもしれませんね。
もう少し調べてみます。

ちなみに、当方の環境は以下の通りです。

Visual Studio 2005 Professional Edition + SP1
OSはWindows XP Professional
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-05 12:33
引用:

Diosanさんの書き込み (2007-06-05 12:11) より:

こちらのローカルな問題なのかもしれませんね。


それはないでしょう。むしろ誤解している可能性が高いと思います。今回は UserControl だとか別 Form だとかは関係ないような気がしています。ToolTip はもともと表示のタイミングというか条件が微妙だったと記憶しています == 直感的でない。(これは過去ログにも挙がっていたと思います)

たとえば、同じコントロール相手ですと破棄されたかどうか関係なく連続で表示してくれないと思います。UserControl 内に 2 つコントロールを用意してテストしてみてください。ToolTip が表示されないようであれば、もう 1 方のコントロールで ToolTip が表示されるか確認してみてください。表示されるようであれば、表示されなかった方のコントロールを再度トライしてみてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
オノデラ
会議室デビュー日: 2007/06/05
投稿数: 10
投稿日時: 2007-06-05 13:08
ちょっと調べてみましたが、2回目以降 ToolTip の内部ハンドルが例外をスローしているようです。(1回目は正常でした)

何らかのタイミングで ToolTip が破棄されてしまう可能性があるかも知れませんね。
オノデラ
会議室デビュー日: 2007/06/05
投稿数: 10
投稿日時: 2007-06-05 13:19
あ、以前私も今回と似たような問題で質問を投げていたことがありました。ご参考にどうぞ。

http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=573639&SiteID=7

[ メッセージ編集済み 編集者: オノデラ 編集日時 2007-06-05 13:22 ]
Diosan
常連さん
会議室デビュー日: 2006/07/27
投稿数: 29
お住まい・勤務地: 静岡
投稿日時: 2007-06-05 13:50
じゃんぬねっとさん、オノデラさん。
回答ありがとうございます。

じゃんぬさんが仰られた、2つコントロールを用意してというのは試してみましたが、
状況はかわらずでした。

オノデラさんに提示して頂いたリンクを参考に調べてみました。
やはり、ToolTipのTopLevelControlが最初に表示したフォームに設定されているようです。
最初に表示したフォーム上でしかチップが表示されないみたいですね。
もともとは別プロジェクトで、"tooltipからフォームが既にDisposeされている"と
いった類の例外が発生していたので、今回の調査をしていたのですが
これなら納得できます。

リンク先にあったえムナウさんの言葉が当てはまりそうです
引用:

つまり、ToolTipを内包しているコントロールは全て同じインスタンスを、
複数のTopLevelControlで使いまわすことは出来ません。



UserControlに張り付けているActiveXが重たいので、使い回したかったのですが...。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-05 13:57
引用:

オノデラさんの書き込み (2007-06-05 13:19) より:

あ、以前私も今回と似たような問題で質問を投げていたことがありました。ご参考にどうぞ。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=573639&SiteID=7


あーこれですか。私の方のミニマムコードでは再現しないのは無理ないですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)