2011-02-09 14 views
17

Ok, więc jestem kompletnym początkującym i udało mi się stworzyć małą aplikację w C#, w której wpisuję nazwę użytkownika w polu tekstowym, a aplikacja pobiera awatar tej nazwy użytkownika i wyświetla go w skrzynce obrazkowej.PictureBox Tooltip changing C#

Co chcę zrobić, to mieć etykietkę wskazującą nazwę użytkownika, która została wpisana w polu tekstowym, gdy mysz unosi się nad załadowanym awatarem. powinien się zmieniać za każdym razem, gdy ładowany jest nowy awatar. Wiem, jak używać podpowiedzi w normalny sposób, ale jest to dla mnie nieco skomplikowane. Każda pomoc zostanie doceniona.

Dzięki.

Odpowiedz

30

Dodaj zdarzenie najedź do swojego skrzynki obrazkowej za pomocą następującego kodu. Odpowiedź

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

działało idealnie! Właśnie zamieniłem "Twoja nazwa użytkownika" dla textBox1.Text: D thank you! – BrandNewDev

+3

Cieszę się, że mogę usłyszeć, to jedna z tych rzeczy, które się zastanawiasz, teraz dlaczego microsoft nie utworzył właściwości o nazwie tooltip dla kontrolki picturebox ... zabrał mi też trochę czasu na początku – Joe

0
 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(); 
    } 
+0

Zastanawiam się ... Dlaczego ramka graficzna zostaje unieważniona za każdym razem, gdy mysz przesuwa się nad nią? W typowej sytuacji moglibyśmy unieważnić okienko z obrazkami kilka razy w ciągu sekundy ... wszystko w imię aktualizacji etykiety narzędzia. Ta rażąca nieefektywność jest poważnym nierozruszeniem. –

18

Joes' robi to zadanie, ale jest nieskuteczny. Kod tworzy nowy numer ToolTip za każdym razem, gdy jest on objęty. Gdy używasz metody SetToolTip(), wiąże ona utworzony ToolTip z określonym sterowaniem i przechowuje ToolTip w pamięci. Tę metodę należy wywołać tylko raz. Proponuję utworzyć tylko jeden ToolTip dla każdego PictureBox w swoim konstruktorze formularzy. Przetestowałem to i to działa dobrze, a narzędzie-tips pokazać się szybciej dla mnie:

public MyForm() 
{ 
    InitializeComponent(); 

    // The ToolTip for the PictureBox. 
    new ToolTip().SetToolTip(pictureBox1, "The desired tool-tip text."); 
} 
0

odpowiedź Brandon-Miller jest w porządku, wyjątkiem na fakt, że sugeruje, aby utworzyć jedną Tooltip za PictureBox . To nadal jest nieskuteczne, ale lepsze niż podejście Joe - ponieważ nie potrzebujesz więcej niż jednego obiektu Tooltip dla całego formularza! Może tworzyć tysiące "definicji podpowiedzi" (prawdopodobnie nie jest to rzeczywisty termin) dla różnych kontrolek (bitów i bobów w formularzach). Właśnie dlatego definiujesz kontrolkę jako pierwszy parametr podczas tworzenia lub ustawiania etykiety narzędzia.

Prawidłowa (lub przynajmniej najmniej rozrzutny) podejście, o ile mi wiadomo, jest utworzyć jeden Tooltip obiekt za formę a następnie użyć SetTooltip funkcji do tworzenia „Definicje” dla różnych kontroli . Przykład:

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

    // The ToolTip inicialization. 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"); 
} 

Lub nieco inaczej, z inicialization zrobione wcześniej:

// 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"); 
} 

Jeśli dodał podpowiedź w oknie projektanta formularzy, można pominąć deklarację na początku. Nie musisz nawet tego wymuszać (o ile mi wiadomo, powinien to zrobić kod wygenerowany przez projektanta), po prostu użyj SetToolTip, aby utworzyć nowe podpowiedzi dla różnych kontrolek.