Domanda

Ho una speciale etichetta nella mia forma, che dovrebbe mostrare in una descrizione del testo. L'etichetta è dichiarata come classe privata nella forma (controllo nested), e dovrebbe "vedere" il controllo ToolTip del form padre.

Ecco il codice. Sicuramente, io ottiene gli errori di qui, perché il costruttore viene chiamato prima l'aggiunta controllo privato della collezione controllo modulo proprietario ...

Modifica: C'è una possibilità non passare il form1 o il controllo Tooltip nel costruttore?

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

namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Form1() 
        {
            this.InitializeComponent();

            FormLabel myFormLabel = new FormLabel("uraaaaa!");

            this.Controls.Add(myFormLabel);

            myFormLabel.Location = new Point(20, 20);
        }

        private class FormLabel : Label
        {
            public FormLabel(string toolTip) : base()
            {
                this.Text = toolTip.ToUpperInvariant();

                (this.FindForm() as Form1).toolTip1.SetToolTip(this, toolTip);
            }
        }
    }
}
È stato utile?

Soluzione 3

Una soluzione temporanea può essere come:

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

namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Form1(){
            this.InitializeComponent();
            FormLabel myFormLabel = new FormLabel("uraaaaa!");
            this.Controls.Add(myFormLabel);
            myFormLabel.Location = new Point(20, 20);
        }

    private class FormLabel : Label
    {
        private string toolTipText;
        public FormLabel(string toolTip) : base() {                
            this.BorderStyle = BorderStyle.FixedSingle;
            this.toolTipText = toolTip.ToUpperInvariant();
        }

        protected override void OnParentChanged(EventArgs e) {
            Form1 f1 = (this.Parent as Form1);
            if (f1 != null)
                f1.toolTip1.SetToolTip(this, this.toolTipText);
        }
    }
}
}

Altri suggerimenti

Perché non basta passare il modulo nel costruttore di FormLabel?

public Form1() 
{
    this.InitializeComponent();
    FormLabel myFormLabel = new FormLabel(this, "uraaaaa!");
    this.Controls.Add(myFormLabel);
    myFormLabel.Location = new Point(20, 20);
}

private class FormLabel : Label
{
    public FormLabel(Form1 form, string toolTip) : base()
    {
        this.Text = toolTip.ToUpperInvariant();
        form.toolTip1.SetToolTip(this, toolTip);
    }
}

Mi aspetterei che per lavorare ... se non lo fa, si prega di fornire i dettagli di ciò che gli errori che stai vedendo. Sto assumendo c'è un buon motivo per fare questo nella vita reale - ci si sente un po 'contorto per me in questo momento

.

È possibile utilizzare qualsiasi istanza di ToolTip per impostare un tooltip - Si possono trovare più facile per creare una nuova istanza di ToolTip, piuttosto che riutilizzare quello sul modulo:

public FormLabel(string toolTip) : base()
{
    this.Text = toolTip.ToUpperInvariant();

    ToolTip myToolTip = new ToolTip();
    myToolTip.SetToolTip(this, toolTip);
}

In alternativa si potrebbe passare esplicitamente un'istanza di descrizione comandi al controllo, in questo modo:

public Form1() 
{
    this.InitializeComponent();

    FormLabel myFormLabel = new FormLabel("uraaaaa!", this.toolTip1);
    this.Controls.Add(myFormLabel);
    myFormLabel.Location = new Point(20, 20);
}

private class FormLabel : Label
{
    public FormLabel(string text, ToolTip toolTip) : base()
    {
        this.Text = text.ToUpperInvariant();
        toolTip.SetToolTip(this, text);
    }
}

Questo aiuta a chiarire le cose un po '?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top