1

単なる文字列の代わりに (つまり、文字列を 2 番目のパラメーターとして渡す代わりに)ToolTip.SetToolTipツールチップとしてコントロールを開くために、または同様のものを使用できるかどうか疑問に思っています。SetToolTip(controlToWhichToAdd, panelToDisplayAsToolTip)

これが不可能な場合、次善の策はmouse_enter、コントロールのイベントでマウスの位置にパネルを表示し、それを削除する (または非表示にする) ことだと思いmouse_leaveます。

または、これをより簡単な方法で可能にする他のプラクティスはありますか?

4

3 に答える 3

1

Tooltip.Popup イベントのハンドラーを作成し、ポップアップをキャンセルして独自のパネルを表示できます。ただし、適切なタイミングでクリーンアップする必要があります。

例えば:

private void ToolTip1_Popup(Object sender, PopupEventArgs e)
{
  e.Cancel = true;
  //Do work here to display whatever control you'd like
}

ツールチップ表示でより多くの書式設定オプションを探しているだけの場合は、代わりに、HTML 対応のツールチップを実装するこの CodeProject エントリのようなものがあります。

ここに画像の説明を入力

于 2013-04-11T14:36:36.927 に答える
1

1 つのアプローチは、ToolTip コントロールを継承し、SetToolTip メソッドと Showメソッドをオーバーライドすることです。SetToolTip 内のプライベート メソッド - SetToolTipInternalを書き直す必要がありますが、ほとんどの機能は再利用できます - マウス イベント ( leave 、 move ) を使用して領域をバインドします。しかし、ツールチップはウィンドウの内部を使用して風船ウィンドウを表示するためです。かなりのコードをオーバーライドする必要があります。

しかし、これには時間がかかり、かなりのテストが必要になる可能性があります。

于 2013-04-11T14:47:15.257 に答える
1

これはそのままでは不可能です。選択肢は 2 つあります。最初のオプションはDraw Eventをオーバーライドすることです。これにより、ツールチップの外観をカスタマイズできます。この例を次に示します。このメソッドを使用する場合は、 OwnerDrawプロパティを に設定してください。true

簡単なカスタマイズが必要な場合は最初の方法が有効ですが、より柔軟なオプションが必要な場合は 2 番目の方法が最適です。2 番目のオプションは、既に提案したことを実行して、独自の種類のツールチップを作成することです。簡単に言うと、最初にMouseEnter イベントのイベント ハンドラーを作成します。そのイベントが発生したら、 Timerを有効にします。このタイマーは、ツールチップが表示される前に発生する遅延です。最後に、パネルをマウス座標に表示するだけです。

ボタンとタイマーを備えたフォームがあり、ボタンにパネルであるツールチップを持たせたいとします。

public partial class Form1 : Form
{
    private Panel _myToolTipPanel;

    private void Form1_Load(object sender, EventArgs e)
    {
        _myToolTipPanel = new Panel {Visible = false};
        Controls.Add(_myToolTipPanel);

        Label myLabel = new Label();
        myLabel.Text = "Testing";
        _myToolTipPanel.Controls.Add(myLabel);
    }

    private void button1_MouseEnter(object sender, EventArgs e)
    {
        timer1.Enabled = true;
    }

    private void button1_MouseLeave(object sender, EventArgs e)
    {
        timer1.Enabled = false;
        _myToolTipPanel.Visible = false;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Enabled = false;
        Point position = Cursor.Position;
        Point formPoisition = PointToClient(position);

        _myToolTipPanel.Visible = true;
        _myToolTipPanel.Location = formPoisition;
    }
}

もちろん、ツールチップを美しくする必要がありますが、これが一般的な考え方です。

于 2013-04-11T14:42:26.253 に答える