Avatar billede jaffafo Nybegynder
02. januar 2006 - 10:47 Der er 5 kommentarer og
1 løsning

Spørgsmål om Arraylist, ComboBox, Form og Click_Event

Hej

jeg har kodet et lille program i Java som jeg så nu har forsøgt at oversætte til C#, uden succes.

Koden:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Lottotal
{
    public partial class Lottotal : Form
    {
        private static String version;
        public Lottotal()
        {
            InitializeComponent();

            //Sætter tekst i label
            version = "Version: 0.1";
            lblVersion.Text = version;

            //Tilføjer tal til ComboBoxen
            CBoxAntalSedler.Items.Add(1);
            CBoxAntalSedler.Items.Add(2);
            CBoxAntalSedler.Items.Add(3);
            CBoxAntalSedler.Items.Add(4);
            CBoxAntalSedler.Items.Add(5);
            CBoxAntalSedler.SelectionStart = 1;
        }

        private void nyetal_Click(object sender, EventArgs e)
        {
            Label lblSeddel = new Label();

            int a = Convert.ToInt32(CBoxAntalSedler.SelectedItem);
            for (int i = 0; i < a; i++)
            {
                ArrayList liste = talfinder();
                lblSeddel.Text = "Tal: " + liste.Count;
                Console.Write(liste.ToString());
                panSedler.Controls.Add(lblSeddel);
            }
        }

        private static ArrayList talfinder()
        {
            Random generator = new Random();
            ArrayList lst = new ArrayList();
            int a = 7;
            //Finder 7 tal mellem 1 og 36 og fyld det på arraylisten
            for (int i = 0; i < a; i++)
            {
                int num1 = generator.Next(35) + 1;

                //Tilføjer tal til arraylisten
                if (lst.Count == 0)
                {
                    //smider det udtrukne tal "num1" i arraylisten
                    lst.Add(num1);
                }
                else
                {
                    //tjekker om tallet eksisterer i forvejen
                    if (taltjek(num1, lst) == true)
                    {
                        //tallet eksisterer allerede
                        a++;
                    }
                    else
                    {
                        //tallet eksisterer ikke så vi tilføjer det
                        lst.Add(num1);
                    }
                }
            }

            //Sorterer listen
            lst.Sort();
            return lst;
        }

        private static Boolean taltjek(int nyttal, ArrayList lst)
        {
            //skriver tal i arraylisten ud
            Boolean nr = false;

            //Løber listen igennem og tjekker om tallet (nyttal) eksisterer i listen
            foreach (Object item in lst)
            {
                if (item.Equals(nyttal))
                {
                    nr = true;
                }
            }
            return nr;
        }

        private void omLottotalToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Lottotal\n" + version + "\n" + "Copyright 2006");
        }

        /* private static String talstreng(ArrayList lst)
        {
            //skriver tal i arraylisten ud
            String indexnr = "";
            Char c = ',';

            foreach (Object item in lst)
            {
                indexnr += item + ", ";
                indexnr.TrimEnd(null);
                indexnr.TrimEnd(c);
            }

            /*
            for (int i = 0; i < lst.Count; i++)
            {

            }
            return indexnr;
           
        }
        */
    }
}

Problemerne er som følger:

1. Jeg kan ikke få programmet til at skrive den enkelte array i min arrayliste ud.

2. Når jeg har trykket på min knap og kørt koden så kan jeg ikke køre koden igen. Dvs jeg er nødt til at lukke programmet ned og starte det igen for at kunne køren Click event'en på knappen igen. :/

3. Min ComboBox er tom når jeg starter programmet + jeg kan skrive i den. Hvordan kan jeg gøre sådan at man ikke kan skrive i den og at den står på et bestemt felt som default (som f.eks. "1")

4. Man kan resize vinduet. Dette vil jeg ikke have at man skal kunne :)


Håber jeg har gjort mig forståelig her :)
Avatar billede bitsch Nybegynder
02. januar 2006 - 13:03 #1
Her er en rettet udgave:
Jeg udskriver her til en TextBox:
Der er rettet en del i dine metoder.
Og ja jeg har ikke dybtetestet eksemplet men det ser ud til at virke.


    public partial class Lottotal : Form
    {
        public Lottotal()
        {
            InitializeComponent();

            // Overvej at bruge NumericUpDown control i stedet for følgende:
            this.comboBoxAntalSedler.Items.Add(1);
            this.comboBoxAntalSedler.Items.Add(2);
            this.comboBoxAntalSedler.Items.Add(3);
            this.comboBoxAntalSedler.Items.Add(4);
            this.comboBoxAntalSedler.Items.Add(5);
            this.comboBoxAntalSedler.SelectedIndex = 1;
        }

        private void ButtonNyeTalClick(object sender, EventArgs e)
        {
            int antalSedler = this.comboBoxAntalSedler.SelectedIndex;

            this.textBoxSedler.Text = string.Empty;

            for (int i = 0; i <= antalSedler; i++)
            {
                ArrayList talliste = Talfinder();

                StringBuilder stringBuilder = new StringBuilder();

                stringBuilder.AppendLine(String.Format("Tal: {0}: ", talliste.Count));

                string seddelTekst = string.Empty;

                foreach (int nummer in talliste)
                {
                    seddelTekst = string.Concat(seddelTekst, nummer.ToString(), " - ");
                }

                stringBuilder.AppendLine(seddelTekst);

                this.textBoxSedler.Text = string.Concat(this.textBoxSedler.Text, stringBuilder.ToString());
            }
        }

        private static ArrayList Talfinder()
        {
            Random generator = new Random();
            ArrayList talliste = new ArrayList();
            int antalTal = 7;

            //Finder 7 tal mellem 1 og 36 og fyld det på arraylisten
            while (talliste.Count < antalTal)
            {
                int nummer = generator.Next(35) + 1;

                //tjekker om tallet eksisterer i forvejen
                if (Taltjek(nummer, talliste))
                {
                    talliste.Add(nummer);
                }
            }

            //Sorterer listen
            talliste.Sort();
            return talliste;
        }


        /// <summary>
        /// Checker om tallet er indeholdt i listen.
        /// </summary>
        /// <param name="nyttal"></param>
        /// <param name="lst"></param>
        /// <returns>True hvis nyt nummer.</returns>
        private static bool Taltjek(int tal, ArrayList talliste)
        {
            bool value = true;

            // Overvej en anden collection type!.
            if (talliste.Contains(tal))
            {
                value = false;
            }

            return value;
        }
Avatar billede bitsch Nybegynder
02. januar 2006 - 14:30 #2
Vedr sp 1 + 2. Så var der en del uhensigtsmæssigheder i dine if sætninger som er blevet ryddet op.

vedr. sp. 3 På din ComboBox sæt DropDownStyle til DropDownList! Men overvej at bruge en NummericUpDownControl som er oplagt her i dette eksempel.

Vedr. sp. 4 så sæt din FormBorderStyle til FixtDialog
Avatar billede jaffafo Nybegynder
02. januar 2006 - 15:39 #3
Takker for svaret.. Jeg gider ikke at bare kopiere din kode da jeg jo ikke lærer så meget af det, så jeg overfører din kode langsomt over i min så jeg kan bedre forstå sammenhængen :)
Avatar billede bitsch Nybegynder
02. januar 2006 - 16:12 #4
Nej det var heller ikke tanken. Personligt ville jeg nok også strikke det lidt anderledes sammen, men som eksempel er det fint nok.
Avatar billede bitsch Nybegynder
03. januar 2006 - 16:24 #5
Men jeg håber da at du kan acceptere svaret!
Avatar billede jaffafo Nybegynder
03. januar 2006 - 16:28 #6
whoopsy..  troede da bestemt jeg havde accepteret.. :/  men nu er det så gjort :)
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