Laden...

MouseHover für einzelne ToolStripItems in ToolStrip realisieren

Erstellt von Martinar vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.479 Views
M
Martinar Themenstarter:in
55 Beiträge seit 2010
vor 12 Jahren
MouseHover für einzelne ToolStripItems in ToolStrip realisieren

Hallo Leute,

mit dieser Funktion steuere ich alle ToolStripButtons in einem ToolStrip, wenn ein Click-Ereignis ausgelöst wird:

private void ToolStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            switch (this.ToolStrip.Items.IndexOf(e.ClickedItem))
            {
                case 0:
                    Cursor.Current = Cursors.WaitCursor;
                    Cursor.Current = Cursors.Default;
                    break;
...

Nun ist meine Frage, ob es auch eine Möglichkeit gibt, über eine Funktion alle Hover Ereignisse in einem ToolStrip zu steuern.

Mein Ziel ist, dass in dem ToolStrip zu jedem Button noch ein Text im Statusstrip erscheint.

Ich hoffe ihr könnt mir helfen...

771 Beiträge seit 2009
vor 12 Jahren

Jedes ToolStripItem verfügt doch über ein MouseHover-Ereignis.

M
Martinar Themenstarter:in
55 Beiträge seit 2010
vor 12 Jahren

Ja das weiß ich, aber ich würde gerne nur eine Funktion benutzen, die über switch case die einzelnen hover anspricht

C
48 Beiträge seit 2011
vor 12 Jahren

Das ist schwer aber wie wäre es damit?


Form1_Load(object sender, EventArgs e)
{
    foreach(ToolStripItem toolstripitem in ToolStripMenuItem.DropDownItems)
    {
        toolstripitem.MouseHover += new System.EventHandler(toolstripitem_MouseHover);
    }
}
toolstripitem_MouseHover(object sender, EventArgs e)
{
    //Aktionen mit "sender" ausführen
}

Gruß,
C#ler

In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon

771 Beiträge seit 2009
vor 12 Jahren

Dann registriere einfach für alle deine ToolStripItems eine Methode und werte dadrin dann den sender aus:


void item_MouseHover(object sender, EventArgs e)
{
    ToolStripItem item = sender as ToolStripItem;
    if(item != null)
    {
       int index = toolStrip.Items.IndexOf(item);
       // hier mit item oder index arbeiten

       statusStripLabel.Text = item.Text; // Test
    }
}

C#ler war zwar etwas schneller, aber ich dafür ausführlicher 😜

P.S.


Cursor.Current = Cursors.WaitCursor;
Cursor.Current = Cursors.Default;

ist ziemlich sinnlos so...

5.742 Beiträge seit 2007
vor 12 Jahren

Ja das weiß ich, aber ich würde gerne nur eine Funktion benutzen, die über switch case die einzelnen hover anspricht

Öhm - das ist aber keine gute Idee...
Warum ein Switch-Case bauen, wenn es auch ohne deutlich einfacher ginge?

Schaue lieber einmal, dass du die Texte z.B. in einem Dictionary speicherst und somit nur noch eine gemeinsame Methode brauchst (ohne Spezialbehandlung der einzelnen Items).
Evtl. kannst du sogar eine Komponente ähnlich dem ToolTipProvider schreiben (findet man vielleicht sogar schon irgendwo was Fertiges).

C
48 Beiträge seit 2011
vor 12 Jahren

Dann registriere einfach für alle deine ToolStripItems eine Methode und werte dadrin dann den sender aus:

Ich hab auch nur eine Methode die ich allen ToolStripItems zuweise. Du hast die EventHandler-Zuweisung vergessen.

In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon

M
Martinar Themenstarter:in
55 Beiträge seit 2010
vor 12 Jahren

Cursor.Current = Cursors.WaitCursor;
Cursor.Current = Cursors.Default;

Das war nur ein Platzhalter...

Vielen Dank für eure Ideen, es funktioniert.

771 Beiträge seit 2009
vor 12 Jahren

Hi C#ler,

da hast du mich wohl mißverstanden. Mein Beitrag bezog sich nur auf den Eingangspost von Martinar.