Объединить NotifyIcon и ToolTip - PullRequest
12 голосов
/ 11 марта 2010

Я работал с NotifyIcon, чтобы показать значок на панели задач. Эта программа не имеет формы Windows. Возможно, я мог бы создать его и сделать его невидимым, но я надеялся избежать этого. Функции ToolTip, прикрепленные к NotifyIcon, в некоторой степени отсутствуют, и один из гуру предложил мне взглянуть на функциональность ToolTip. Можно прикрепить всплывающую подсказку к форме. Можно ли прикрепить его только к NotifyIcon? Я пытаюсь сделать это:

NotifyIcon CTicon = new NotifyIcon();
ToolTip toolTip = new ToolTip();
toolTip.SetToolTip(CTicon, "Test");

И я получаю сообщение об ошибке "не могу преобразовать из 'System.Windows.Forms.NotifyIcon' в 'System.Windows.Forms.Control'. Есть ли способ преобразовать? Я также пытался:

toolTip.SetToolTip(CTicon.Container, "Test");

но контейнер, очевидно, также не является допустимым элементом управления. Я прошу прощения за полное отсутствие понимания того, как это может или не может работать.

Заранее спасибо.

Ответы [ 6 ]

28 голосов
/ 06 сентября 2012

Запоздалый ответ, но может быть полезным для других.

NotifyIcon.Text = "ToolTipText";
3 голосов
/ 11 марта 2010

Иконки в трее не поддерживают квадратные подсказки, только всплывающие подсказки. В некотором смысле имеет смысл, значки обычно довольно близко друг к другу, поэтому было бы трудно увидеть, какая иконка создала наконечник без «стержня» на воздушном шаре. Используйте свойство NotifyIcon.BalloonTipText.

1 голос
/ 11 июня 2014

Все значки в трее на моем компьютере имеют всплывающие подсказки. Вам нужно создать свой NotifyIcon, используя конструктор, который принимает Компонент в качестве аргумента. Он отображает свойство NotifyIcon.Text.

Мне удалось создать его, используя пример кода здесь: http://msdn.microsoft.com/en-us/library/1by05f8d.aspx

using System;
using System.Drawing;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form
{
    private System.Windows.Forms.NotifyIcon notifyIcon1;
    private System.Windows.Forms.ContextMenu contextMenu1;
    private System.Windows.Forms.MenuItem menuItem1;
    private System.ComponentModel.IContainer components;

    [STAThread]
    static void Main() 
    {
        Application.Run(new Form1());
    }

    public Form1()
    {
        this.components = new System.ComponentModel.Container();
        this.contextMenu1 = new System.Windows.Forms.ContextMenu();
        this.menuItem1 = new System.Windows.Forms.MenuItem();

        // Initialize contextMenu1 
        this.contextMenu1.MenuItems.AddRange(
                    new System.Windows.Forms.MenuItem[] {this.menuItem1});

        // Initialize menuItem1 
        this.menuItem1.Index = 0;
        this.menuItem1.Text = "E&xit";
        this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);

        // Set up how the form should be displayed. 
        this.ClientSize = new System.Drawing.Size(292, 266);
        this.Text = "Notify Icon Example";

        // Create the NotifyIcon. 
        this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);

        // The Icon property sets the icon that will appear 
        // in the systray for this application.
        notifyIcon1.Icon = new Icon("appicon.ico");

        // The ContextMenu property sets the menu that will 
        // appear when the systray icon is right clicked.
        notifyIcon1.ContextMenu = this.contextMenu1;

        // The Text property sets the text that will be displayed, 
        // in a tooltip, when the mouse hovers over the systray icon.
        notifyIcon1.Text = "Form1 (NotifyIcon example)";
        notifyIcon1.Visible = true;

        // Handle the DoubleClick event to activate the form.
        notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);

    }

    protected override void Dispose( bool disposing )
    {
        // Clean up any components being used. 
        if( disposing )
            if (components != null)
                components.Dispose();            

        base.Dispose( disposing );
    }

    private void notifyIcon1_DoubleClick(object Sender, EventArgs e) 
    {
        // Show the form when the user double clicks on the notify icon. 

        // Set the WindowState to normal if the form is minimized. 
        if (this.WindowState == FormWindowState.Minimized)
            this.WindowState = FormWindowState.Normal;

        // Activate the form. 
        this.Activate();
    }

    private void menuItem1_Click(object Sender, EventArgs e) {
        // Close the form, which closes the application. 
        this.Close();
    }
}
1 голос
/ 26 марта 2011

Ты не должен.

NotifyIcon используется для отображения уведомлений, тогда как ToolTip используется для отображения информации о текущей активности пользователя, его следует использовать «на месте».

Ознакомьтесь с рекомендациями по пользовательскому интерфейсу:

  1. Уведомления
  2. Воздушные шары
1 голос
/ 11 марта 2010

Я не уверен, что вы можете установить всплывающую подсказку прямо на значок уведомления. Это то же самое, что установка свойства text на значке уведомления. Существуют некоторые ограничения для текста значка уведомления. Он ограничен 128 символами и будет оставаться на короткое время. Если вы хотите отображать больше информации в течение более длительного периода времени, вы должны взглянуть на текстовое свойство всплывающей подсказки значка уведомления. Я настоятельно рекомендую прочитать страницу MSDN, это очень полезно.

http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx

1 голос
/ 11 марта 2010

NotifyIcon используется для значка на панели задач, который вы видите в правом нижнем углу экрана, использование всплывающей подсказки только для таких элементов управления, как текстовые поля, флажки и т. Д. ... например, предположим, что есть TextBox Экземпляр с именем 'textBox1' в форме, чем это будет работать:

toolTip1.SetToolTip(textBox1, "Hello World");

Теперь, когда вы наводите курсор мыши на текстовое поле, появляется подсказка ...

...