C# Programmering 2. Hjälp med windows forms projekt.

Permalänk
Medlem

C# Programmering 2. Hjälp med windows forms projekt.

ÖVERBLICK:
Mitt program visar en textruta som i sin tur vid knapptryck genererar en slumpvald boks ToString-override().
Dessa böcker är importerade från en textfil via en Streamreader.

PROBLEMET:
Min fråga är. Hur ska jag visa i utskriften om en bok finns tillgänglig eller inte? I textfilen finns även ett boolean värde, true eller false för böckerna. Men hur ska jag beroende på vad deras boolean värde är satt till kunna visa det i den slutgiltiga utskriften?
Hur ska jag konvertera ett boolean värde så att jag får ut en sträng som visar om boken finns eller inte.

Min kod:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace Tipsmaskinen { public partial class Form1 : Form { List<Bok> mainList = new List<Bok>(); List<string[]> coreList = new List<string[]>(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { FileLoader(); } // public void FileLoader() { if (File.Exists("texter.txt")) { List<string> itemSaver = new List<string>(); StreamReader reader = new StreamReader("texter.txt", Encoding.Default, true); string item = ""; while ((item = reader.ReadLine()) != null) { itemSaver.Add(item); } foreach (string b in itemSaver) { string[] vektor = b.Split(new string[] { "###" }, StringSplitOptions.None); coreList.Add(vektor); switch (vektor[2]) { case "Roman": mainList.Add(new Roman(vektor[0], vektor[1], vektor[2])); break; case "NovellSamling": mainList.Add(new Novellsamling(vektor[0], vektor[1], vektor[2])); break; case "Tidskrift": mainList.Add(new Tidskrift(vektor[0], vektor[1], vektor[2])); break; default: break; } Random random = new Random(); string obj = mainList[random.Next(mainList.Count)].ToString(); textBox1.Text = Convert.ToString(obj); } } } } public class Bok { public string typ; public string tittel; public string skribent; // Konstruktor för bok. public Bok(string tittel, string skribent, string typ) { this.typ = typ; this.tittel = tittel; this.skribent = skribent; } //En standard ToString för en bok. public override string ToString() { return tittel + ". " + skribent + ". " + typ; } public string GetTitel() { return tittel; } } public class Roman : Bok { public Roman(string tittel, string skribent, string typ) : base(tittel, skribent, typ) { } public override string ToString() { typ = "Roman"; return "\"" + tittel + "\" " + "av " + skribent + ". (" + typ + ")"; } } public class Novellsamling : Bok { public Novellsamling(string tittel, string skribent, string typ) : base(tittel, skribent, typ) { } public override string ToString() { typ = "Novellsamling"; return "\"" + tittel + "\" " + "av " + skribent + ". (" + typ + ")"; } } public class Tidskrift : Bok { public Tidskrift(string tittel, string skribent, string typ) : base(tittel, skribent, typ) { } public override string ToString() { typ = "Tidskrift"; return "\"" + tittel + "\" " + "av " + skribent + ". (" + typ + ")"; } } }

Permalänk
Medlem

I respektive override ToString():

if (boolValue) { return "Return när värde är sant"; } else { return "Return när värde är falsk"; }

Men detta kräver ju givetvis att du har en property som matchar värdet som finns i din textfil.

Permalänk
Medlem

@virree97:
Du får sätta en prop på din Bok som är en bool, typ InStock;
Sen när du läser upp filerna får du sätta den till true/false via constructorn beroende på vad det står i textfilen.
Sen kan du göra antingen en egen metod för det eller lägga på det i din ToString();

public override string ToString() { var status = InStock ? "Boken finns" : "Boken finns inte"; .... // det du har nu + status. }

Däremot ser jag ingen anledning till varför du har massa arv, krånglar bara till det och ingen av övriga böcker har någon unik implementering som kräver det. Alla böckerna har samma override på ToString(), där det ända som skiljer är typen och det kan du sätta direkt i och utgå från basklassen, KISS.

Permalänk
Medlem

@zaibuf: Okej tack som tusan!