Avatar billede lasserasch Juniormester
20. februar 2007 - 12:39 Der er 15 kommentarer og
1 løsning

Kan ikke få mit listview til at fungere helt.

Hejsa.

Jeg har et lidtview, hvor jeg lister nogle menupunkter i mit program.

Jeg vil så gerne lave et kald hver gang et punkt klikkes, og det virker sådan set også fint nok...

Men alt efter hvilket punkt man har trykket på, skal en ny form åbnes. Hvordan gør man det? Jeg har følgende kodestykke, men jeg har problemer med at hitte ud af hvordan jeg får oprettet en reference til den nye form.

Navnet på den nye form ligger jeg i TAG feltet for hvert menupunkt.


  void listView1_ItemActivate(object sender, EventArgs e)
        {

            ListView.SelectedListViewItemCollection LWC1 = listView1.SelectedItems;
           
            foreach (ListViewItem LWI1 in LWC1)
            {
// Det herunder fungerer ikke... FRM1 er stadig null, så konverteringenfungerer jo ikke ordenligt.

                    Form FRM1 = LWI1.Tag as Form;
                    FRM1.ShowDialog();
            }
        }


Er det mig, som griber tingene helt forkert an?

/Lasse
Avatar billede mh6000 Nybegynder
20. februar 2007 - 12:42 #1
Prøv lige at poste den kode hvor du fylder listview'et
Avatar billede lasserasch Juniormester
20. februar 2007 - 12:44 #2
Det gør jeg manuelt fra designeren. Jeg hente ingen data ind i mit listview som sådan. Men har manuelt oprettet de punkter jeg gene vil have listet.
Avatar billede kalp Novice
20. februar 2007 - 12:44 #3
Det er klart.. du kan ikke caste dit tag til en form.
Avatar billede mh6000 Nybegynder
20. februar 2007 - 12:47 #4
hvis du ligger formen ind som dit tag, kunne det virke :-)
Avatar billede kalp Novice
20. februar 2007 - 12:49 #5
du kan lave en switch og tjekke på navnet i dit Tag og så oprette den form der nu skal oprettes helt normalt Form FRM1 = new XXXForm();

hvor XXXForm er navnet på den form du vil oprette.

kan også være os som ikke har forstået det du prøver:)
Avatar billede lasserasch Juniormester
20. februar 2007 - 12:49 #6
Min tag værdi er f.eks. : frm_form2
Kan det virkelig ikke lade sig gøre at bruge den information til at angive navnet på den form der skal åbnes ved tryk på knappen?

Ved godt jeg kunne skrive :

if(LWI1.tag = "form2")
{
form2 newform = new form2;
newform.showdialog();
}
else
{
if (form LWI1.tag = "form3")
{
form3 newform = new form3;
newform.showdialog();
}
}

Men det holder jo ikke, hvis jeg har 50 menupunkter.

Det må kunne gøres smart.....
Avatar billede lasserasch Juniormester
20. februar 2007 - 12:51 #7
gawi. Kan du ikke give et eksempel.

Som sagt hedder mit tag på et af listview punkterne f.eks. : frm_form2

Hvordan kan jeg ud fra det tag på oprettet reference og åbnet frm_form2 formen?

/Lasse
Avatar billede kalp Novice
20. februar 2007 - 13:02 #8
ja hvis du gemmer dit tags string værdi i formToCreate istedet for der nu står "" så kan du gøre dette.

    string formToCreate = "";
            switch (formToCreate)
            {
                case "frm_form2": Form FM1 = new frm_form2(); break;
                case "Form": Form FM1 = new Form(); break;
            }

kræver at du har en form klasse du selv har defineret som hedder frm_form2
Avatar billede lasserasch Juniormester
20. februar 2007 - 13:04 #9
Nå, jeg fandt en løsning på mit problem.

Bruger bare følgende kode, men synes nu stadig at der må findes en nemmere måde at gøre det på. Nu har jeg ikke så mange menupunkter, men havde jeg haft 100 punkter ville det jo blive vildt meget kode jeg skulle skrive :



  void listView1_ItemActivate(object sender, EventArgs e)
        {

            ListView.SelectedListViewItemCollection LWC1 = listView1.SelectedItems;
           
            foreach (ListViewItem LWI1 in LWC1)
            {
                int Frm_Name = LWI1.IndentCount;
                switch (Frm_Name)
                {
                    case 0:
                        frm_kalk_newkalk nf0 = new frm_kalk_newkalk();
                        nf0.ShowDialog();
                        break;

                    case 1:
                        frm_kalk_totalprisoversigt nf1 = new frm_kalk_totalprisoversigt();
                        nf1.ShowDialog();
                        break;

                    case 2:
                        frm_kalk_dokalk nf2 = new frm_kalk_dokalk();
                        nf2.ShowDialog();
                        break;

                    case 3:
                        frm_kalk_ops_senarios nf3 = new frm_kalk_ops_senarios();
                        nf3.ShowDialog();
                        break;
                }
               
               
            }

        }
Avatar billede lasserasch Juniormester
20. februar 2007 - 13:06 #10
Havde ikke set dit svar gawi. Jeps.... Var noget ala det jeg søger. Smid svar så tester jeg lige imens.

/Lasse
Avatar billede mh6000 Nybegynder
20. februar 2007 - 13:07 #11
Prøv med:
LWI1.Tag = frm2
Avatar billede mh6000 Nybegynder
20. februar 2007 - 13:10 #12
Og så
dim frm as Form = lvi.tag
frm.show
eller
frm.showdialog
eller
frm.visible=true  'Hvis du allerede har kaldt show???
Avatar billede kalp Novice
20. februar 2007 - 13:12 #13
void listView1_ItemActivate(object sender, EventArgs e)
        {

            ListView.SelectedListViewItemCollection LWC1 = listView1.SelectedItems;
            Form form;
            foreach (ListViewItem LWI1 in LWC1)
            {
                int Frm_Name = LWI1.IndentCount;
                switch (Frm_Name)
                {
                    case 0:
                        form = new frm_kalk_newkalk();
                        break;

                    case 1:
                        form  = new frm_kalk_totalprisoversigt();
                        break;

                    case 2:
                        form  = new frm_kalk_dokalk();
                        break;

                    case 3:
                        form = new frm_kalk_ops_senarios();
                        break;
                }
                form.ShowDialog();
               
            }

        }


form.ShowDialog skal kun skrives der hvis det er sikkert der altid bliver vist en når løkken køres.. ellers skal den ind før break i hver af dem.

men mener godt du kan bruge form som den samme variabel.
Avatar billede lasserasch Juniormester
20. februar 2007 - 13:18 #14
Er endt op med dette stykke kode. Og det fungerer perfekte, tak for hjælpen begge 2 men tror denne går til gawi mh6000.

/Lasse





void listView1_ItemActivate(object sender, EventArgs e)
        {

            ListView.SelectedListViewItemCollection LWC1 = listView1.SelectedItems;
           
            foreach (ListViewItem LWI1 in LWC1)
            {
                int Frm_Name = LWI1.IndentCount;
                switch (Frm_Name)
                {
                    case 0: frm_kalk_newkalk nf0 = new frm_kalk_newkalk(); nf0.ShowDialog(); break;
                    case 1: frm_kalk_newkalk nf1 = new frm_kalk_newkalk(); nf1.ShowDialog(); break;
                    case 2: frm_kalk_dokalk nf2 = new frm_kalk_dokalk(); nf2.ShowDialog(); break;
                    case 3: frm_kalk_totalprisoversigt nf3 = new frm_kalk_totalprisoversigt(); nf3.ShowDialog(); break;
                    case 4: frm_kalk_ops_manuellepriser nf4 = new frm_kalk_ops_manuellepriser(); nf4.ShowDialog(); break;
                    case 5: frm_kalk_ops_senarios nf5 = new frm_kalk_ops_senarios(); nf5.ShowDialog(); break;
                }
               
               
            }

        }
Avatar billede lasserasch Juniormester
20. februar 2007 - 13:20 #15
Så det vil sige at jeg ikke bruger TAG værdien alligevel, men det er jo også mindre vigtigt. Var bare lige min første tanke til en ID værdi for hvert menupunkt, men ingen grund til at skrive 10 bogstaver når man kan nøjes med 1 tal værdi.

/Lasse
Avatar billede kalp Novice
20. februar 2007 - 13:23 #16
bestemt ikke:)
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