Announcement

Collapse
No announcement yet.

Menustrip verändern- die richtige Vorgehensweise gesucht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Menustrip verändern- die richtige Vorgehensweise gesucht

    Hallo,

    ich möchte das der anwender in einem Programmfenster die shortcutkeys enes menüs selber ändern kann!
    Mein erster Versuch war, dass ich die Caption und shortcutkeys in einer listbbox eingelesen habe damit der anwender den menüpunkt markieren kann, bei dem er den shortcutkey ändern möchte.

    um aber den shortcutkey zu ändern brauche ich den menünamen.
    also habe ich in eine hashtable den index der listbox und den menünamen in der selben schleife gespeichert.

    1. Frage

    Würdet ihr es auch so machen oder hättet ihr es anders gemacht?

    2. Frage

    Angenommen der Anwender markiert den zweiten Eintrag der Listbox.
    Nun muss ich den zweiten Eintrag der Hashtable auslesen und ihn als "ToolStripMenuItem" handeln damit ich die Eigenschaft ".ShortcutKeys" setzen kann.
    Wie macht man sowas?
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo,
    1. erstelle eine List<ToolStripMenuItem> die per rekursiver Schleife mit allen Menüeinträge gefüllt ist
    2. binde die ListBox mit DataSource an diese Liste. Setzte die Eigenschaften für Display und Value (auf das was angezeigt werden soll und auf das was als ID gilt)
    3. Zur Änderung ahme das VS nach. D.h. biete Checkboxes für Strg, Alt, Shift und eine Liste für die Buchstaben und F-Tasten
    4. Bei Auswahl eines Eintrags in der ListBox mit den ToolstripMenuItems setzte die Eigenschaften der Checkboxes und der anderen Liste
    5. Zum Speichern serialisiere diese Liste mit den ToolstripMenuItems (zB BinaryFormatter)
    6. Zum Einlesen deserialisiere diese Liste und per rekursiver Schleife baue dein Menü auf


    mfG
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      hi,

      habe ne liste angelegt:
      Code:
      private List<ToolStripMenuItem> vList = new List<ToolStripMenuItem>();
      ne Methode zum befüllen der liste:

      Code:
      //Methode schreibt alle Menüs in eine List
              private void MenueInList(ToolStripItemCollection items)
              {
                  for (int i = 0; i <= items.Count - 1; i++)
                  {
                      ToolStripMenuItem myItem = items[i] as ToolStripMenuItem;
                      if (null != myItem)
                      {
                          vList.Add((items[i] as ToolStripMenuItem));
                          MenueInList(((ToolStripMenuItem)items[i]).DropDownItems);
                      }
                  }
              }
      im Constructor des Formulare steht das hier:
      Code:
      lbxShortCuts.DataSource = vList;
      MenueInList(menuStrip1.Items);
      aber das mit display und value habe ich nicht verstanden was du da meinst und wie? kannst Du es mir erklären bitte?
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Hallo,

        im Anhang ein fertiges Projekt. Es funktioniert sogar . Die user.config wird auch erstellt.

        Im Code sind genügend Kommentare, so dass es eigentlich keine Frage mehr geben dürfte.

        Viel Erfolg!

        mfG Gü
        Attached Files
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Hi,

          vielen vielen Dank für Deine Mühe!

          Bei mir kommt an dieser stelle:
          Code:
          for (int i = 0; i < menuItemsList.Count; i++)
          menuItemsList[i].ShortcutKeys = (Keys)arrList[i];
          diese Fehlermeldung:
          System.NullReferenceException wurde nicht behandelt.
          Message="Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
          Source="MenüsShortCutsDemo"
          StackTrace:
          bei MenüsShortCutsDemo.Form1..ctor() in E:\C#\Entwickler-Forum\MenüsShortCutsDemo\MenüsShortCutsDemo\Form1. cs:Zeile 55.
          bei MenüsShortCutsDemo.Program.Main() in E:\C#\Entwickler-Forum\MenüsShortCutsDemo\MenüsShortCutsDemo\Progra m.cs:Zeile 19.
          bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
          bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
          bei Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssembly()
          bei System.Threading.ThreadHelper.ThreadStart_Context( Object state)
          bei System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
          bei System.Threading.ThreadHelper.ThreadStart()
          InnerException:
          wenn ich das Projekt in VS starten möchte.
          Kompilieren tut!
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Originally posted by markus lemcke View Post
            Bei mir kommt an dieser stelle:
            ..
            diese Fehlermeldung:
            ..
            wenn ich das Projekt in VS starten möchte.
            Och Markus,

            das Problem solltest Du doch mittlerweile auf Anhieb erkennen. Beim ersten Start des Programms ist die user.config noch nicht da. Also wird die Shortcut-Liste nicht gelesen und ist deshalb null.

            Das Problem läßt sich sofort mit

            if (arrList != null)
            {
            for (int i = 0; i < menuItemsList.Count; i++)
            menuItemsList[i].ShortcutKeys = (Keys)arrList[i];
            }
            beheben.

            -Peter

            Comment


            • #7
              Hallo,

              habs mal probiert wie Leondardo daVinci. Alles fertig machen aber ein kleines Detail bewusst weglassen. Das waren pure Grundlagen wie Peter auch bemerkt hat - die Lösung war ja so einfach wenn, aber scheinbar hast du bisher keinen Lernfortschritt gemacht. In Delphi musste es doch auch so sein dass wenn ein Objekt nicht existiert darauf nicht verwiesen werden kann - Du musst unbedingt Grundlagen der Programmierung lernen, egal welche Sprache. Nicht nur Codebeispiele kopieren - sondern diese verstehen lernen, deshalb sind auch so viele Kommentare in meinem Bsp. Aber die Grundlagen musst du dir selber beibringen.

              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                Hallo,

                hab das wirklich lauffähige Projekt unter http://www.codeproject.com/KB/menus/...tomizatio.aspx veröffentlicht - damit nichts mehr selbst gedacht werden muss.

                Außerdem ist die XOR-Prüfung jetzt funktionsfähig - ohne den Umweg über den KeyConverter, war gestern wohl schon zu müde um dies zu checken...

                mfG Gü
                Zuletzt editiert von gfoidl; 23.08.2008, 14:32.
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  leute, ich bin jetzt aucvh mal ne runde stinke sauer und kotz von oben runter! in sachen postings lesen macht hier auch keine fortschritte!
                  nach der änderung, start zwar das programm, aber ich habe noch immer keine user.config auf dem rechner!
                  Sie Screenshot in der Anlage von der windows-dateisuche!!!
                  Nach Texteditor.exe.config müßte ja, dank der alphatischen sortierung, die user.config kommen. tut sie aber nicht!

                  also, wie soll ich wissen wann welche Fehlermeldungen kommen, wenn ich die user.config nicht habe? kann mir mal jemand die frage beantworten!

                  wo ist die gammel user.config?
                  Attached Files
                  Herzliche Grüße

                  Markus Lemcke
                  barrierefreies Webdesign

                  Comment


                  • #10
                    Hi,

                    wenn ich mich mal einmischen darf...
                    Führ' doch mal cmd.exe aus und tipp' dann folgendes ein:
                    Code:
                    c:
                    dir /s %HOMEPATH%\user.config
                    Gibt Dir der Befehl Dateien zurücK?

                    Karsten

                    Comment


                    • #11
                      hi,

                      klar darfst Du Dich einmischen!

                      das ist das Ergebnis:
                      C:\Dokumente und Einstellungen\Markus>dir /s %HOMEPATH\user.config
                      Das System kann die angegebene Datei nicht finden.
                      gerade habe ich gesehen, dass dui es vom rootcerzeichnis aus gemacht hast:
                      C:\>dir /s %HOMEPATH%\user.config
                      Das System kann den angegebenen Pfad nicht finden.
                      hat auch nichts gebracht!
                      Zuletzt editiert von markus lemcke; 27.08.2008, 20:07.
                      Herzliche Grüße

                      Markus Lemcke
                      barrierefreies Webdesign

                      Comment


                      • #12
                        hi,

                        habe gerade gegoogelt nach user.config und xp und das hier gefunden:
                        http://board.planetpeer.de/index.php?topic=4635.0

                        genau da sind meine auch und die von Günther!

                        in einem versteckten order!!!!!
                        Herzliche Grüße

                        Markus Lemcke
                        barrierefreies Webdesign

                        Comment


                        • #13
                          Super Erkenntnis, dass bei WinXP die Anwendungsdaten in einem versteckten Ordner liegen. Gut dass es Google gibt.

                          Es wäre doch noch einfacher gegangen. Ich hab den kompletten Pfad zur Datei angegeben und auch ich habe XP. Warum sollte also bei dir der Pfad bzw. die Datei nicht existieren? Wenn sie also nicht sichtbar ist, dann ist sie unsichtbar oder wies bei Windows heißt: versteckt.
                          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                          Comment


                          • #14
                            brauchst nicht wieder von oben runter "kotzen".
                            ich habe mehrfach daraufhin gewiesen, dass ich die user.config nicht finde und bekam keine antwort!
                            Herzliche Grüße

                            Markus Lemcke
                            barrierefreies Webdesign

                            Comment


                            • #15
                              Originally posted by markus lemcke View Post
                              brauchst nicht wieder von oben runter "kotzen".
                              ich habe mehrfach daraufhin gewiesen, dass ich die user.config nicht finde und bekam keine antwort!
                              Hallo Markus,

                              ehrlich gesagt, gefällt mir Dein Ton überhaupt nicht. Die Motivation Dir mal wieder eine Antwort zu geben, sinkt doch drastisch.

                              -Peter

                              Comment

                              Working...
                              X