Permalänk

C# labb help

Hej har en labb där jag ska skapa en mediaStore.
Mitt problem är att jag försöker kolla så att mitt produktnamn/varunr som jag skriver in ej redan finns i min lista.
När jag använder FindByText får jag något error att den ej är definerad jag funderar på ifall det är något biblotek med den metoden som jag missat att lägga till eller ifall FindByText är en inbyggd metod som endast finns i senaste versionerna av visual studios eftersom jag i min kurs fått tillgång till Visualstudios 2008 genom virtual machine.
Här är metoden som ska lägga till en ny produkt jag har försökt förklara vad varje sak gör men ifall det är några oklarheter är de bara att fråga hoppas ni kan hjälpa till.

public void NyProdukt_Click(object sender, EventArgs e) { String ProduktNamn = ProdNamn.Text; // mitt textfälts namn för produkten String varuNr = Varu_Nr.Text; // mitt textfälts namn för varuNr for(int i = 0; i <= count; i++){ // loop för att loopa igenom alla items i min lista. if(Lista.Items.Contains(Lista.Items.FindByText(ProduktNamn))) // här är mitt problem när jag skriver FindByText så får jag ett error som säger " Error 'System.Windows.Forms.ListBox.ObjectCollection' does not contain a definition for 'FindByText' and no extension method 'FindByText" MessageBox.Show("Finns redan produkt med det namnet"); } if (Lista.Items.Contains(Varu_Nr.Text)) // skit i denna funktion ska göra likadant som däruppe ifall jag får det att funka. { MessageBox.Show("VaruNummret finns redan"); } else { Lista.Items.Add(ProduktNamn + " " + varuNr); // här lägger jag till produkten till min lista ifall de inte redan finns en produkt med det namnet eller varunamnet. count++; // count ska användas för att kolla så att loopen körs så många gånger som det finns antal items i min lista. }

Permalänk
Medlem

Du har snurrat till din if-sats, se mitt exempel.

if (list.FindByText("Hello world") == null) // Finns ej Console.WriteLine("Finns ej"); else // Finns Console.WriteLine("Finns");

Ser dessutom att du loopar igenom din lista, varför?

Visa signatur

EPoX 8RDA+, XP2500+, 2x256Mb PC3200 (DualCh), Club3D 9800PRO, Seagate 7200.7 160Gb 8Mb Limited edition

Permalänk
Medlem

FindByText är en metod du enbart finner på ASP.NET webforms och inte Winforms.

Vad du behöver göra i det här fallet är att loopa igenom alla objekt och jämföra dom ifall de börjar på Produkt namnet

Alternativt ifall att produkt namn får finnas flera ggr med olika kombinationer av varunummer så kör bara
if(Lista.Items.Contains(ProduktNamn + " " + varuNr))
//error hantering

--

Samt ett tips för framtiden för att hålla en naming conventions, det gör din kod bland annat lättare att läsa, vist detta är inget krav men från vad jag ser ovan så hade det inte skadat.

Du har information om C# Naming conventions här: http://www.dofactory.com/reference/csharp-coding-standards.as...

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk

Jag hittade något exempel där dom använde en loop för att kolla igenom alla i listan så tänkte att de kanske var nödvändigt eller en snygg lösning.
for(int i = 0; i <= count; i++; ){
if(Lista[i] == produktNamn)
// finns i listan där i är
}
och sen körs den så många gånger jag har items i listan men jag vet inte kanske är överflödig kod och inte ens behöver användas?

Permalänk

Okej så jag kan ej använda den metoden?
okej får fortsätta försöka problemet är dock att jag försökte använda en loop tidgare och fick fel på min if(Lista[i] så jag funderar på om jag behöver lägga in min lista i en vektor eller om de helt enkelt går att bara söka igenom listans alla platser endå?

Permalänk
Medlem

Ett annat förslag är att du använder dig av artikelnummer istället för att göra en textjämförelse.
har du tillgång till linq kan du i princip skriva

var item =list.FirstOrDefault(w=>w.artikelnummer==artikelnummer) sen kollar du om item innehåller den redan

Visa signatur

Fractal Design Node 304 -> ASUS ROG STRIX Z370-I GAMING ->i5 8600K -> be quiet! Pure Rock -> MSI GeForce RTX 4070 VENTUS 2X E 12G OC -> Corsair Vengeance LPX 3200 32GB -> Seasonic FOCUS Plus 650W Gold -> Samsung 960 EVO 500GB -> 2 * Western Digital Black 2 TB -> Samsung 850 EVO Basic SSD 500GB

Permalänk

Grejen är att både varuNr och produktNamn ska vara unikt ifall någon är intresserad så är detta hela specen.

Permalänk

for (int i = 0; i < Lista.Items.Count; i++)
{
Den borde loopa igenom så många gånger jag behöver men jag vet inte riktigt hur jag ska göra för att min
Lista ska kolla igenom varje plats...
tips uppskattas medans jag forsätter googla haha!

Permalänk
Medlem

Hur mycket har du arbetat med klasser? Du kan lätt lösa denna uppgift med att skapa en klass som innehåller Produkt, Pris, varunummer.

Sedan overide ToString och skriv ut namnet du vill att den ska få i din Lista.
Samt overrida Equals för att fixa så att den matchar både på Namn och Produkt nummer.

Att lösa uppgiften utan klasser kommer vara så got som omöjligt/Otroligt krångligt.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk

Jag har en produkt klass men jag vet inte riktigt hur jag skulle använda denna ifall jag varje gång jag skapar en ny list item skapar ett objekt innehållande dessa variablar eller om jag ska göra en enum för varje produkt ..

Permalänk
Medlem

hjälp tack

Hej! Registrerade mig nyss för behöver hjälp med en sak om någon vänlig person kan hjälpa mig.
Jag har denna veckan börjat distanskurs i C# jag ska beskriva denna texten i flödeschema:

På vardagar går Kalle upp. Han tvättar sig, om mamman tittar på.
På söndagar sover kalle vidare tills mamman ropar honom till frukost, i så fall gör han som på vardagar.

Jag kan ju inte börja med att han går upp, för de gör han inte på söndagar direkt, ska jag börja med villkoret är det vardag, isåfall hur ska jag göra om det inte är söndag, pilar ska dras men vet ej vad som är rätt . det som krånglar här är att jag vet inte var jag ska göra loopen och typ ställa att i rätt ordning.

sry om detta är på fel tråd, kanske finns annan tråd jag borde skriva i men hittar inte.
Är väldigt tacksam för hjälp för jag hittar verkligen inte nåt på internet elr i studieboken

Permalänk
Medlem
Skrivet av pokerproffset:

Hej! Registrerade mig nyss för behöver hjälp med en sak om någon vänlig person kan hjälpa mig.
Jag har denna veckan börjat distanskurs i C# jag ska beskriva denna texten i flödeschema:

På vardagar går Kalle upp. Han tvättar sig, om mamman tittar på.
På söndagar sover kalle vidare tills mamman ropar honom till frukost, i så fall gör han som på vardagar.

Jag kan ju inte börja med att han går upp, för de gör han inte på söndagar direkt, ska jag börja med villkoret är det vardag, isåfall hur ska jag göra om det inte är söndag, pilar ska dras men vet ej vad som är rätt . det som krånglar här är att jag vet inte var jag ska göra loopen och typ ställa att i rätt ordning.

sry om detta är på fel tråd, kanske finns annan tråd jag borde skriva i men hittar inte.
Är väldigt tacksam för hjälp för jag hittar verkligen inte nåt på internet elr i studieboken

Är det bara ett flöde du ska beskriva i ett flödesdiagram? Jag ser inte att du behöver göra någon "loop". Loopen är underförstådd om flödet utförs flera gånger med olika inparametrar.

Dessutom så är det en NY tråd du ska göra, har du aldrig använt ett forum tidigare?

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Gör en produkt-klass innehållandes namn, pris och serienummer. Ändra Lista så att den innehåller objekt av denna klass.
dvs

List<Produkt> Lista = New List<Produkt>();

Kontrollera om produkt är tillagd, om inte - lägg till:

if(Lista.Any(produkt=>produkt.Namn == ProductNamn || produkt.Serienummer == varuNr) { MessageBox.Show("Finns redan produkt med det namnet"); return; } var nyProdukt = new Produkt() { Namn = ProductNamn, Serieummer= varuNr, Pris = [ditt fält för inmatat pris] } Lista.Add(nyProdukt);

Permalänk

Hej Findah tack så mycket för ditt svar hjälpte jättemycket var en del jag inte förstod först men sen när jag läste på om List och hur denna funkar så klarnade mycket upp!
såhär ser min NyProdukt_Click ut nu:
public void NyProdukt_Click(object sender, EventArgs e)

{
string produktnamn;
string varunr;
string Pris_;

produktnamn = ProdNamn.Text;
varunr = Varu_Nr.Text;
Pris_ = pris_.Text;

List<produkt> Lista = new List<produkt>();

if(Lista.Any( produkt => produkt.Namn == produktnamn || produkt.serienummer == varunr))
{
MessageBox.Show("Finns redan produkt med det namnet");
return;

}

var nyProdukt = new produkt()
{
Namn = produktnamn,
serienummer = varunr,
pris = Pris_
ProdNamn.Text = ProdNamn.Text + ", ";

Varu_Nr.Text = Varu_Nr.Text + ", ";

pris_.Text = pris_.Text + ", ";

};

problemet med att jag inte kan få ut objektet i min lista jag körde en console.writeline och fick ut att det som skrevs ut var
Produkt.mediastore, så objektnamnet + projektnamnet, jag vet inte riktigt varför jag inte får ut de som jag skriver i mina textfält till listan men jag anar att de kan ha något med det att göra. försökt på många olika sett men verkar vara någonting jag missat totalt för jag har försökt med ToString som skulle vara en metod för att overida objektet och visa dess värde? men det funkade inget vidare.

Permalänk
Medlem
Skrivet av fanvafint:

Hej Findah tack så mycket för ditt svar hjälpte jättemycket var en del jag inte förstod först men sen när jag läste på om List och hur denna funkar så klarnade mycket upp!
såhär ser min NyProdukt_Click ut nu:
public void NyProdukt_Click(object sender, EventArgs e)

{
string produktnamn;
string varunr;
string Pris_;

produktnamn = ProdNamn.Text;
varunr = Varu_Nr.Text;
Pris_ = pris_.Text;

List<produkt> Lista = new List<produkt>();

if(Lista.Any( produkt => produkt.Namn == produktnamn || produkt.serienummer == varunr))
{
MessageBox.Show("Finns redan produkt med det namnet");
return;

}

var nyProdukt = new produkt()
{
Namn = produktnamn,
serienummer = varunr,
pris = Pris_
ProdNamn.Text = ProdNamn.Text + ", ";

Varu_Nr.Text = Varu_Nr.Text + ", ";

pris_.Text = pris_.Text + ", ";

};

problemet med att jag inte kan få ut objektet i min lista jag körde en console.writeline och fick ut att det som skrevs ut var
Produkt.mediastore, så objektnamnet + projektnamnet, jag vet inte riktigt varför jag inte får ut de som jag skriver i mina textfält till listan men jag anar att de kan ha något med det att göra.

försökt på många olika sett men verkar vara någonting jag missat totalt för jag har försökt med ToString som skulle vara en metod för att overida objektet och visa dess värde? men det funkade inget vidare.

http://msdn.microsoft.com/en-us/library/ms173154.aspx
När du använder dig av Console.WriteLine på ett objekt, anropas ToString() för att få en sträng-representation av objektet.
Om du inte har overridat denna metod i din egna klass anropas ToString i Object-klassen (som alla klasser ärver av).
Du måste overrida ToString i din egna klass för att definiera vad som skall skrivas ut när ToString() anropas.

Exempel (i din Produkt-klass):

public override ToString() { return "Produktnamn: " + Namn + " Serienummer: " + Serienummer + " Pris: " + Pris; }

var nyProdukt = new produkt() { Namn = produktnamn, serienummer = varunr, pris = Pris_ ProdNamn.Text = ProdNamn.Text + ", "; Varu_Nr.Text = Varu_Nr.Text + ", "; pris_.Text = pris_.Text + ", "; };

Förstår inte vad du försöker göra här, ta bort de tre sista raderna. I det blocket ska du enbart sätta objektets egenskaper. http://msdn.microsoft.com/en-us/library/bb384062.aspx

Förövrigt skapar du en ny objektlista varje gång användaren trycker på NyProdukt-knappen. Alltså kommer aldrig några inlagda objekt hittas eftersom den alltid är tom. Du får läsa in inlagda produkter till listan då programmet startas i stället.