none
Ein Menü-Item ansprechen RRS feed

  • Frage

  • Hallo Forum,
    die Methode MakeUserMenu() erstellt ein Menü. In dieser Methode möchte ich den Menüpunkt "iniWrite" deaktivieren.
    In der Methode btn_Click möchte ich diesen Menü-Punkt wieder aktivieren. Wie kann aber diesen Menüpunkt ansprechen?
    Der Code:
    private void MakeUserMenu()
            {
                ReadWriteIniFile ini = new ReadWriteIniFile(ref _InstallationData, PasswordLenght);
                MainMenu menu = new MainMenu();
                MenuItem file = new MenuItem("Tools");
                MenuItem iniWrite = new MenuItem("&Ini-File schreiben", new EventHandler(ini.WriteIni));
                MenuItem iniRead = new MenuItem("&Ini-File Einlesen", new EventHandler(ini.ReadIni));
                file.MenuItems.Add(iniWrite);
                file.MenuItems.Add(iniRead);
                menu.MenuItems.Add(file);
                this.Menu = menu;
            }
    private void btn_Click( object sender, EventArgs e )
    		{
                try
                {
                    _InstallationData.ClearAll();
                    CheckOS os = new CheckOS(ref _InstallationData);
                    ConnectAndGetDataFromMySql getData = new ConnectAndGetDataFromMySql(ref _InstallationData);
                    PasswordGenerator passwordGenerator = new PasswordGenerator(PasswordLenght, ref _InstallationData);
                    GetDrivesForInstall();
                }
                catch (Exception ex)
                {
                    log.Error("Fehler beim ProgrammStart in MainForm: " + ex.Message);
                    MessageBox.Show("Fehler: \n" + ex.Message,"Fehler in btnMySQL", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
    		}
    Vielen Dank für Eure Hilfe
    P.

    Dienstag, 7. Februar 2012 08:35

Antworten

  • Purclot,

    da hast Du 2 Wege ( mindestens ).

    1. Du deklariest Dein MenuItem iniWrite auf Klassenebene, dann kannst Du es ganz einfach mittels Enabled()=false/true deaktivieren/aktivieren

    2. Du kannst über die MenuItems Eigenschaft Deines this.Menu eine MenuItemCollection abrufen. Diese enthält Dein MenuItem file, das Du über die Find() Methode ermitteln kannst, bezw. wenn Du den searchAllChildren parameter auf true setzt, kannst Du auch direkt nach Deinem MenuItem iniWrite suchen.

    Voraussetzung dafür ist aber, dass Du den jeweiligen MenuItem`s immer einen Namen zuweist.


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    • Als Antwort markiert Purclot Dienstag, 7. Februar 2012 09:58
    Dienstag, 7. Februar 2012 08:55
  • Hi, du musst auch über die MenuCollection im Menu gehen

    zB

    foreach (ToolStripItem item in Menu.Items)
                {
                    if (item.Text == "&Ini-File schreiben")
                        item.Enabled = false;
                }

    • Als Antwort markiert Purclot Dienstag, 7. Februar 2012 09:58
    Dienstag, 7. Februar 2012 09:00
  • Hallo P.,

    Hier noch eine LINQ-Implementation.
    Der Text des gesuchten MenuItems wurde vorher in einer Konstanten gespeichert

    private void btn_Click(object sender, EventArgs e) {
        var iniRead = (from file in this.Menu.MenuItems.OfType<MenuItem>()
                        from menuItem in file.MenuItems.OfType<MenuItem>()
                        where menuItem.Text == MENUTEXT_INI_READ
                        select menuItem).FirstOrDefault();
    
        if (iniRead != null)
            iniRead.Enabled = true;
    }

    Gruß
    Marcel

    • Als Antwort markiert Purclot Dienstag, 7. Februar 2012 09:58
    Dienstag, 7. Februar 2012 09:44
    Moderator

Alle Antworten

  • Hi Purclot,

    iniWrite.Enabled = True bzw Fals sollte klappen.

    MFG

    Björn

    Dienstag, 7. Februar 2012 08:45
  • Hallo Björn,

    ja, es klappt solange ich das in der Methode "MakeUserMenu()" platziere ;-)

    In der Methode btn_Click() ist "iniWrite" unbekannt und eben in dieser Methode möchte ich die MenuItems (de)aktivieren.

    Gruß P.


    • Bearbeitet Purclot Dienstag, 7. Februar 2012 08:54
    Dienstag, 7. Februar 2012 08:53
  • Purclot,

    da hast Du 2 Wege ( mindestens ).

    1. Du deklariest Dein MenuItem iniWrite auf Klassenebene, dann kannst Du es ganz einfach mittels Enabled()=false/true deaktivieren/aktivieren

    2. Du kannst über die MenuItems Eigenschaft Deines this.Menu eine MenuItemCollection abrufen. Diese enthält Dein MenuItem file, das Du über die Find() Methode ermitteln kannst, bezw. wenn Du den searchAllChildren parameter auf true setzt, kannst Du auch direkt nach Deinem MenuItem iniWrite suchen.

    Voraussetzung dafür ist aber, dass Du den jeweiligen MenuItem`s immer einen Namen zuweist.


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    • Als Antwort markiert Purclot Dienstag, 7. Februar 2012 09:58
    Dienstag, 7. Februar 2012 08:55
  • Hi, du musst auch über die MenuCollection im Menu gehen

    zB

    foreach (ToolStripItem item in Menu.Items)
                {
                    if (item.Text == "&Ini-File schreiben")
                        item.Enabled = false;
                }

    • Als Antwort markiert Purclot Dienstag, 7. Februar 2012 09:58
    Dienstag, 7. Februar 2012 09:00
  • Hallo P.,

    Hier noch eine LINQ-Implementation.
    Der Text des gesuchten MenuItems wurde vorher in einer Konstanten gespeichert

    private void btn_Click(object sender, EventArgs e) {
        var iniRead = (from file in this.Menu.MenuItems.OfType<MenuItem>()
                        from menuItem in file.MenuItems.OfType<MenuItem>()
                        where menuItem.Text == MENUTEXT_INI_READ
                        select menuItem).FirstOrDefault();
    
        if (iniRead != null)
            iniRead.Enabled = true;
    }

    Gruß
    Marcel

    • Als Antwort markiert Purclot Dienstag, 7. Februar 2012 09:58
    Dienstag, 7. Februar 2012 09:44
    Moderator
  • Hallo,
    vielen Dank für Eure Hilfe.

    @Marcel: die LINQ-Variante sieht cool aus, vor allem, dass man die "from"-Klausel "stapeln" kann.

    Gruß P.

    Dienstag, 7. Februar 2012 10:03