Avatar billede neo3000 Nybegynder
02. marts 2011 - 21:43 Der er 6 kommentarer og
1 løsning

ContextMenuStrip "uden" form.

Hej,

Jeg ønsker at lave en applikation egentlig består 100% af en contextMenuStrip.
Problemet er at jeg ikke lige kan regne ud hvordan jeg får vist en menu, når jeg ikke har en form.
Udover det, kommer problemet at jeg gerne vil have den vist der hvor cursoren er placeret.

Lidt ala' det her: http://bullzip.com/products/exm/info.php
- Jeg ønsker bare at lave det lidt mere brugervenligt :)

Nogen som kan give mig et par pointere i retning af hvad jeg skal gøre her?

- Neo3000
Avatar billede bvli Praktikant
04. marts 2011 - 13:31 #1
Til inspiration. Viser en context menu efter 10 sekunder.

using System;
using System.Windows.Forms;

namespace B.Testing.ContextMenu
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            NotifyIcon icon = new NotifyIcon();
            icon.Visible = false;
            icon.ContextMenuStrip = new ContextMenuStrip();
            icon.ContextMenuStrip.Items.Add("Test", null, delegate
            {
                MessageBox.Show("You clicked the context menu item.");
                Application.Exit();
            });

            Timer t = new Timer();
            t.Interval = 10000;
            t.Tick += delegate
            {
                icon.ContextMenuStrip.Show(200, 200);
                t.Stop();
            };
            t.Start();

            Application.Run();
        }
    }
}


Og her er måden du får fat i din mus og dit keyboard:

http://www.codeproject.com/KB/cs/globalhook.aspx
Avatar billede neo3000 Nybegynder
05. marts 2011 - 00:06 #2
Ja..

Jeg er kommet lidt længere.

Jeg har nu følgende problemer:
- Når en contextMenu åbnes uden for en form, så vises et "vindue" nede i taskbaren som først lukker når man klikker på noget i selve menuen.
- Menuen kan ikke lukkes når man klikker udenfor menuen.


Det sjove er faktisk at problemet kun opstår efter menuen er blevet vist første gang (efter første gang hvor hotkey Win+Z er blevet trykket)

Nogen der kender en løsning?

Kan godt lægge source ind hvis det er nødvendigt :)
Avatar billede Syska Mester
05. marts 2011 - 00:32 #3
Ikke at jeg har løsning på det hele ... men.

Har ContextMenuStrip ikke en Leave event hvor du kan lukke den ned ? (Men det er måske så igen heller ikke så prakisk)

Du skal nok have nogen flere mouse hooks igang i dit program. Eventuelt i en kombination med Leave eventen for ContextMenuStrip.

Leave <- Listen for clicks com ikke er i menuen.
Enter <- Fjerne overstående listener.

Kun ideer ... ikke prøvet.
Avatar billede neo3000 Nybegynder
05. marts 2011 - 01:21 #4
Well, jeg forstår bare ikke hvorfor den åbner en ny instans af et vindue når en contextMenu vises og især ikke når det virker fint første gang, men ikke efterfølgende.

Har prøvet det, og det er lidt tricky at få det til at fungere korrekt for den bliver ved med at lave et vindue, selvom ShowInTaskbar er false og alt det der.
Avatar billede Syska Mester
05. marts 2011 - 01:52 #5
Ja, giver ikke lige nogen mening og kunne ikke lige se din kode mht til at den blev vist igen ... og regnede også med at du havde sat de flags, så derfor jeg ikke svarede på den del.

Det lyder meget sært, men det må jo være pga noget af dit pinvoke du laver for at fange den menu strip og vise den.

mvh
Avatar billede neo3000 Nybegynder
05. marts 2011 - 20:41 #6
Ja, tænker jeg også..

Tænker det kan være mit HotKey lib der overruler et eller andet.
Avatar billede neo3000 Nybegynder
17. april 2013 - 09:59 #7
Lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester