MenuStrip   zodpovězená otázka

VB.NET, Komponenty, Algoritmy, WinForms

Mam takovej problem, za behu programu pridam do menu par polozek a potreboval bych po kliknuti na ty polozky zobrazil msgbox s textem polozky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejprve si vytvořte proceduru události, kterou chcete provést.

    Private Sub ToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim polozka As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
        MsgBox(polozka.Text)
    End Sub

A pak na tuto proceduru ručně vytvořené položce přidejte EventHandler, nejlépe při vytváření položky za běhu programu.

        Dim polozka As New ToolStripMenuItem()
        polozka.Text = "Moje položka menu"
        AddHandler polozka.Click, AddressOf ToolStripMenuItem_Click
        MenuStrip1.Items.Add(polozka)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nenapsal jsem to uplne presne potreboval bych to palikovat na DropDownItems

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je víceméně stejné, věřím, že to zvládnete snadno upravit. Stačí nově vytvořenou položku přidat do kolekce MenuStrip1.DropDownItems.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chcel by som doplniť otázku. Pomocou kódu

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.MyToolStripMenuItem.DropDownItems.Add("Položka" & i)
        i = i + 1
    End Sub

pridám položky. Ako zobraziť ich názvy v MsgBox-e po kliknutí na jednotlivé položky po spustení programu?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takhle:

Dim polozka As ToolStripLabel = Me.MyToolStripMenuItem.DropDownItems.Add("Položka " & i)
        AddHandler polozka.Click, AddressOf ToolStripMenuItem_Click

Zbytek je stejný.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Moje IQ je dnes na bode mrazu. Mám dve možnosti. Vyspať sa na to, alebo znova sa spýtať. Aby som mal kľudnejší spánok, zvolil som tú druhú možnosť. Môžeš, prosím ťa uviesť to celé. Nefunguje mi to. Mimochodom, ako v škole?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Co je na tom těžkého? Prostě ty dva řádky dej do procedury.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

AddHandler mi podčiarkne a vypisuje syntax error.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.MyToolStripMenuItem.DropDownItems.Add("Položka" & i)
        Dim polozka As ToolStripLabel = Me.MyToolStripMenuItem.DropDownItems.Add("Položka " & i)
        AddHandler polozka.Click, AddressOf ToolStripMenuItem_Click
        i = i + 1
    End Sub

Ak si to myslel tak, tak mi vypisuje :Unable to cast object of type 'System.Windows.Forms.ToolStripMenuItem' to type 'System.Windows.Forms.ToolStripLabel'.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ajo, sorry, moje chyba. Správně je to takto:

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.MyToolStripMenuItem.DropDownItems.Add("Položka" & i)
        Dim polozka As ToolStripMenuItem = Me.MyToolStripMenuItem.DropDownItems.Add("Položka " & i)
        AddHandler polozka.Click, AddressOf ToolStripMenuItem_Click
        i = i + 1
    End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Fajn. Vďaka. Už len jediný problém. MsgBox my stalé vypisuje názov &My

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže pre zhrnutie:

Public Class Form1
    Dim i As Integer
    Private Sub ToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim polozka As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
        MsgBox(polozka.Text)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim polozka As ToolStripMenuItem = Me.MyToolStripMenuItem.DropDownItems.Add("Položka " & i)
        AddHandler polozka.Click, AddressOf ToolStripMenuItem_Click
        i = i + 1
    End Sub
End Class

Vďaka, Tomáš!

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback