web-dev-qa-db-ja.com

C#を変更するPictureBoxツールチップ

さて、私は完全な初心者であり、テキストボックスにユーザー名を入力して、アプリケーションがそのユーザー名のアバターを取得して画像ボックスに表示するC#で小さなアプリを組み立てることができました。

ロードしたアバターの上にマウスを置いたときにテキストボックスに入力されたユーザー名をツールチップに表示することです。新しいアバターがロードされるたびに変更する必要があります。ツールチップの通常の使用方法は知っていますが、これは少し複雑です。どんな助けでもありがたいです。

ありがとう。

23
BrandNewDev

次のコードを使用して、ホバーイベントを画像ボックスに追加します。

private void pictureBox1_MouseHover(object sender, EventArgs e)
{
    ToolTip tt = new ToolTip();
    tt.SetToolTip(this.pictureBox1, "Your username");
}
39
Joe

ジョーズの答えは仕事を成し遂げるが、それは非効率的です。コードは、ToolTipがホバーされるたびに新しいPictureBoxを作成します。 SetToolTip()メソッドを使用すると、作成されたToolTipが指定されたコントロールに関連付けられ、ToolTipがメモリに保持されます。このメソッドを呼び出す必要があるのは1回だけです。フォームコンストラクターでは、ToolTipごとにPictureBoxを1つだけ作成することをお勧めします。私はこれをテストしましたが、正常に動作し、ツールチップがより速く表示されます:

public MyForm()
{
    InitializeComponent();

    // The ToolTip for the PictureBox.
    new ToolTip().SetToolTip(pictureBox1, "The desired tool-tip text.");
}
19
Brandon Miller
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        ToolTip tooltip1 = new ToolTip();
        tooltip1.Show(textBox1.Text, this.pictureBox1);
    }

      private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        pictureBox1.Invalidate();
    }
1
Rajesh Kumar G

Brandon-Millerの答えは結構です。exceptは、PictureBoxごとに1つのツールチップを作成することを提案しているためです。これはまだ効果がありませんが、Joeのアプローチよりは優れています。フォーム全体で実際に複数のTooltipオブジェクトを必要としないためです。さまざまなコントロール(フォーム上のビットとボブ)に対して何千もの「ツールチップ定義」(おそらく実際の用語ではない)を作成できます。そのため、ツールチップを作成または設定するときに、最初のパラメーターとしてコントロールを定義します。

私が知っている限り、正しい(または少なくとも最も無駄のない)アプローチはフォームごとに1つのTooltipオブジェクトを作成するで、次にSetTooltip関数を使用して作成しますさまざまなコントロールの「定義」。

例:

private ToolTip helperTip;
public MyForm()
{
    InitializeComponent();

    // The ToolTip initialization. Do this only once.
    helperTip = new ToolTip(pictureBox1, "Tooltip text");
    // Now you can create other 'definitions', still using the same tooltip! 
    helperTip.SetToolTip(loginTextBox, "Login textbox tooltip");
}

または、少し異なりますが、事前に初期化を行います。

// Instantiate a new ToolTip object. You only need one of these! And if
// you've added it through the designer (and renamed it there), 
// you don't even need to do this declaration and creation bit!
private ToolTip helperTip = new ToolTip();
public MyForm()
{
    InitializeComponent();

    // The ToolTip setting. You can do this as many times as you want
    helperTip.SetToolTip(pictureBox1, "Tooltip text");
    // Now you can create other 'definitions', still using the same tooltip! 
    helperTip.SetToolTip(loginTextBox, "Login textbox tooltip");
}

フォームデザイナでツールヒントを追加した場合は、最初の宣言を省略できます。それを初期化する必要すらありません(私の知る限り、これはデザイナが生成したコードで行う必要があります)。SetToolTipを使用して、さまざまなコントロールの新しいツールチップを作成するだけです。

1
EvilGeorge