Avatar billede anri Novice
14. februar 2009 - 14:32 Der er 4 kommentarer og
1 løsning

En popup control

Jeg er ved at lave en control der virker lidt som en dropdown-boks.
Den skal fungere på den måde at der er en knap som eksempeltvis er 100x20 px. Når man trykker på knappen kommer der en liste der skal kunne nogle specielle ting.
Denne liste skal ligge ovenpå andre controls og derfor har jeg 2 løsningsmuligheder, der hver har deres problemer.

Løsning 1.: Jeg laver en dynamisk control som jeg lægger ind på knappens parent og som lægger sig oven på alt andet.
problem: Den bliver klippet af parent control'en og applikations-vinduet. Jeg vil gerne have at denne liste kan gå udover applikationens rammer.

Løsning 2.: Jeg laver et vindue uden borders og benytter det i stedet.
Problem : Dette vindue tager fokus fra parent vinduet, så det ses i top-bjælken og ved at man skal klikke 2 gange på parent for eksempelvis at lukke hele applikationen.

Jeg vil meget gerne have den til at virke som de store dropdown-galleries i MS' ribbon-bar'en.

Nogen gode forslag?
Avatar billede mireigi Novice
18. februar 2009 - 22:59 #1
Dette er sikkert ikke den bedste løsning, og helt sikkert ikke den korrekte, men den virker.

Opret et nyt "Windows Forms" projekt.
Tilføj en "Label" et sted i formen, og deaktiver "AutoSize".

Indsæt følgende i baggrundskoden til formen:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Button b = new Button();
            b.Text = "Hej";
            b.Click += new EventHandler(b_Click);
            b.Name = "button1";
            b.CreateControl();
            label1.Controls.Add(b);

            ComboBox cb = new ComboBox();
            cb.Items.Add("1");
            cb.Items.Add("2");
            cb.Visible = false;
            cb.SelectedIndexChanged += new EventHandler(cb_SelectedIndexChanged);
            cb.Name = "comboBox1";
            cb.CreateControl();
            label1.Controls.Add(cb);

            label1.Size = label1.Controls[0].Size;
            label1.Update();
        }

        void cb_SelectedIndexChanged(object sender, EventArgs e)
        {
            label1.Controls[0].Visible = true;
            label1.Controls[1].Visible = false;
            label1.Size = label1.Controls[0].Size;
            label1.Update();
        }

        void b_Click(object sender, EventArgs e)
        {
            label1.Controls[0].Visible = false;
            label1.Controls[1].Visible = true;
            label1.Size = label1.Controls[1].Size;
            label1.Update();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ComboBox cb = (ComboBox)Controls.Find("comboBox1", true)[0];
            MessageBox.Show(cb.SelectedItem.ToString());
        }
    }
Avatar billede anri Novice
19. februar 2009 - 10:38 #2
Men hvori ligger tricket her?
Bliver "parent" vinduet ikke gråt og dermed deaktiveret når du laver dette trick, og hvordan virker det?
Avatar billede mireigi Novice
19. februar 2009 - 10:44 #3
Det der sker her, er at den knap du trykker på, bliver skiftet ud med en ComboBox, hvorfra du så kan vælge hvad du nu har behov for.

Jeg tror dog at jeg har misforstået dig i første omgang, og det du egentlig ønsker er et menusystem. Jeg vender tilbage senere i dag med et eksempel herpå.
Avatar billede anri Novice
19. februar 2009 - 13:39 #4
Joh, egentlig ikke blot et menusystem..  Det mest optimale ville være et panel der kan poppe op ovenpå applikationen, ligesom hvis man åbner et border-løst vindue.
Grunden til at jeg ikke bare bruger en borderløs form, er fordi den tager fokus fra parent'en, så dennes border bliver grå og man skal trykke 2 gange på den for at aktivere komponenter på parent-formen.
Avatar billede anri Novice
12. april 2012 - 11:30 #5
Jeg fandt aldrig en løsning på dette specifikke problem, men løste det med en helt anden type komponent.
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