トップ回答者
フォーム上のコントロールから任意のタイミングでバルーンメッセージを出すには?

質問
-
いつもお世話になっております。mkmarimoです。
件名のとおり、フォーム上のコントロール(TextBoxなど)から任意のタイミングで
バールーンメッセージを出す方法を考えていますが、うまくいかないため投稿させていただきました。
現在は、TextBoxなどのValidatingイベントで入力値を検証し、入力値にエラーがある場合、
Validatingイベントハンドラ内で、ToolTipコントロールを利用してバルーンを出すという方法で検証しています。
プログラムの流れとしては、まず、フォームのLoadイベントでToolTipのIsBalloonプロパティをtureに設定しています。
そして、バルーンの表示はToolTip.Show (String, IWin32Window) メソッドを利用しています。
ここで、ToolTip.Show (String, IWin32Window) の2番目のパラメータに
バルーンを出したいコントロール(TextBoxなど)を指定していますが、
はじめてバルーンが表示されるときはバルーンがフォームの中心付近から出てきて、
コントロールから出ません。
2回目以降はコントロールからバルーンが出るのですが、
これを最初からコントロールからバルーンが出るようにするにはどうすればよいでしょうか。
解決方法をご存じの方がいらっしゃいましたら、ご教授お願いします。
また、ToolTipコントロール以外でも要件を満たす方法がございましたら、
そちらもご教授お願いします。
回答
-
じゃんぬねっとさんの仰る通りだと思いますが、一応、以下をフォームに仕込んでおけば回避できそうです。
コード ブロックprivate void Form1_Load(object sender, EventArgs e)
{
this.BeginInvoke(new MethodInvoker(Form1_Loaded));
}private void Form1_Loaded()
{
// ToolTip が IsBalloon = true の時、初回の表示位置がおかしいというバグを回避
using (TextBox tb = new TextBox())
{
tb.Visible = false;
this.Controls.Add(tb);
toolTip1.Show("", tb);
this.Controls.Remove(tb);
}
}このバグは、2005/08/22 にすでに報告されているようです。
ToolTip balloon stem is oriented incorrectly for first invocation of ToolTip.Show()
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98281
すべての返信
-
じゃんぬねっとさんの仰る通りだと思いますが、一応、以下をフォームに仕込んでおけば回避できそうです。
コード ブロックprivate void Form1_Load(object sender, EventArgs e)
{
this.BeginInvoke(new MethodInvoker(Form1_Loaded));
}private void Form1_Loaded()
{
// ToolTip が IsBalloon = true の時、初回の表示位置がおかしいというバグを回避
using (TextBox tb = new TextBox())
{
tb.Visible = false;
this.Controls.Add(tb);
toolTip1.Show("", tb);
this.Controls.Remove(tb);
}
}このバグは、2005/08/22 にすでに報告されているようです。
ToolTip balloon stem is oriented incorrectly for first invocation of ToolTip.Show()
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98281