5

シンプルなバルーンツールチップを備えたこのWindowsフォームアプリケーションがあります。デスクトップ上のアプリケーションのウィンドウの場所とマウスカーソルの場所に応じて、バルーンの「ヒント」(またはバルーンのポインティング矢印)が目的の場所を指している場合とそうでない場合があります。

たとえば、私のアプリはデスクトップ側にスナップし、右側にスナップしたときに、マウスカーソルが右側の100ピクセルより下にある場合、バルーンの「先端」が間違った場所を指します。ただし、マウスカーソルが他の場所にある場合は、適切な場所を指します。

この状況では、問題が発生しないように、(実際にマウスカーソルの位置を変更せずに)マウスカーソルの位置を別の場所に偽造したかったのです。

これは可能ですか?どうすればこれを達成できますか?

private void noteTitleInput_KeyPress(object sender, KeyPressEventArgs e) {
    if(e.KeyChar == Convert.ToChar(Keys.Return, CultureInfo.InvariantCulture) && noteTitleInput.Text.Length > 0) {
        e.Handled = true;

        noteInputButton_Click(null, null);
    } else if(!Char.IsControl(e.KeyChar)) {
        if(Array.IndexOf(Path.GetInvalidFileNameChars(), e.KeyChar) > -1) {
            e.Handled = true;

            System.Media.SystemSounds.Beep.Play();

            noteTitleToolTip.Show("The following characters are not valid:\n\\ / : * ? < > |",
                groupNoteInput, 25, -75, 2500);

            return;
        }
    }

    noteTitleToolTip.Hide(groupNoteInput);
}
4

4 に答える 4

4

ツールチップを指定した場所に表示するように設定でき、必ずしもマウスがある場所に表示する必要がないため、カーソル位置を設定する必要がある理由はよくわかりません。

例えば:

tooltip1.Show("My tip", controlOnWhichToShow, 15, 15);

端から 15 ポイント離れた controlOnWhichToShow の左上隅にヒントを表示します。

私が誤解している場合は、どの時点でマウスの位置が使用されているかを指定してください。

于 2010-09-08T15:54:56.357 に答える
3

MouseHover イベントを同期すると、veljkoz が説明するようにツールチップを作成できます。このようにして、ツールチップを好きなように配置できます。コードは次のようになります。

protected override void OnMouseHover(EventArgs e)
{
  ToolTip myToolTip = new ToolTip();
  myToolTip.IsBalloon = true;
  // TODO The x and y coordinates should be what ever you wish.
  myToolTip.Show("Helpful Text Also", this, 50, 50);
  base.OnMouseHover(e);
}

それが役立つことを願っています。

于 2010-09-08T16:13:51.697 に答える
0

Windows フォームでは、ユーザーがコントロール上でマウス ボタンを押したときにマウスがコントロールによってキャプチャされ、ユーザーがマウス ボタンを離したときにマウスがコントロールによって解放されます。

Control クラスの Capture プロパティは、コントロールがマウスをキャプチャしたかどうかを指定します。コントロールがいつマウス キャプチャを失ったかを判断するには、MouseCaptureChanged イベントを処理します。

フォアグラウンド ウィンドウのみがマウスをキャプチャできます。バックグラウンド ウィンドウがマウスをキャプチャしようとすると、ウィンドウは、マウス ポインターがウィンドウの可視部分内にあるときに発生するマウス イベントのメッセージのみを受け取ります。また、フォアグラウンド ウィンドウがマウスをキャプチャした場合でも、ユーザーは別のウィンドウをクリックしてフォアグラウンドに移動できます。マウスがキャプチャされると、ショートカット キーは機能しません。

詳細はこちら。Windows フォームでのマウス キャプチャ

于 2010-08-14T19:52:35.087 に答える
0

クラスであなたが言うことをすることができます。とても簡単な方法でそれを行うことができます。

1つはクラスを作成し、

namespace MousLokasyonbulma

{ class benimtooltip : ToolTip { [System.Runtime.InteropServices.DllImport("User32.dll")] static extern bool MoveWindow(IntPtr h, int x, int y, int width, int height, bool redraw); public benimtooltip() { this.OwnerDraw = true; this.Draw += Benimtooltip_Draw; }

    private void Benimtooltip_Draw(object sender, DrawToolTipEventArgs e)
    {
        e.DrawBackground();
        e.DrawBorder();
        e.DrawText();
        var t = (ToolTip)sender;
        var h = t.GetType().GetProperty("Handle",
          System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
        var handle = (IntPtr)h.GetValue(t);
        var location = new Point(650, 650);
        var ss= MoveWindow(handle, location.X, location.Y, e.Bounds.Width, e.Bounds.Height, false);
    }
}

}

完全なコードMyGitup

プロジェクト例のイメージ https://i.hizliresim.com/1pndZG.png https://i.hizliresim.com/Lvo3Rb.png

于 2019-06-05T05:13:10.577 に答える