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

  • 質問

  • いつもお世話になっております。mkmarimoです。

     

    件名のとおり、フォーム上のコントロール(TextBoxなど)から任意のタイミングで

    バールーンメッセージを出す方法を考えていますが、うまくいかないため投稿させていただきました。

     

    現在は、TextBoxなどのValidatingイベントで入力値を検証し、入力値にエラーがある場合、

    Validatingイベントハンドラ内で、ToolTipコントロールを利用してバルーンを出すという方法で検証しています。

     

    プログラムの流れとしては、まず、フォームのLoadイベントでToolTipのIsBalloonプロパティをtureに設定しています。

    そして、バルーンの表示はToolTip.Show (String, IWin32Window) メソッドを利用しています。

     

    ここで、ToolTip.Show (String, IWin32Window) の2番目のパラメータに

    バルーンを出したいコントロール(TextBoxなど)を指定していますが、

    はじめてバルーンが表示されるときはバルーンがフォームの中心付近から出てきて、

    コントロールから出ません。

     

    2回目以降はコントロールからバルーンが出るのですが、

    これを最初からコントロールからバルーンが出るようにするにはどうすればよいでしょうか。

     

    解決方法をご存じの方がいらっしゃいましたら、ご教授お願いします。

     

    また、ToolTipコントロール以外でも要件を満たす方法がございましたら、

    そちらもご教授お願いします。

    2007年11月20日 2:54

回答

  • じゃんぬねっとさんの仰る通りだと思いますが、一応、以下をフォームに仕込んでおけば回避できそうです。

     

    コード ブロック

    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

    2007年11月20日 4:08

すべての返信

  • ErrorProvider ではダメなのでしょうか?

    そのために作られている代物なので使ってあげてください。

    2007年11月20日 3:18
  • じゃんぬねっとさん

     

    いつもお世話になります。mkmarimoです。

     

     じゃんぬねっと さんからの引用

    ErrorProvider ではダメなのでしょうか?

    そのために作られている代物なので使ってあげてください。

     

    ErrorProviderも試したのですが、アイコンが出てメッセージを見るためにマウスカーソルを

    アイコンまで持っていく必要があったので、マウス操作なしでメッセージ内容を確認できる方法として

    バルーンを試しています。

    2007年11月20日 4:07
  • じゃんぬねっとさんの仰る通りだと思いますが、一応、以下をフォームに仕込んでおけば回避できそうです。

     

    コード ブロック

    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

    2007年11月20日 4:08
  • TH01さん

     

    お世話になります。mkmarimoです。

     

    お教えいただいたコードで問題は解決しました。

    ありがとうございました。

     

     

    2007年11月20日 10:55