Menukaart

Status
Niet open voor verdere reacties.
Bij de artikel_verwijderen knop kan je beter deze code gebruiken:
Code:
        If lvRekening.SelectedItems(0).SubItems(1).Text = 1 Then
            lvRekening.SelectedItems(0).Remove()
        Else
            lvRekening.SelectedItems(0).SubItems(1).Text = CInt(lvRekening.SelectedItems(0).SubItems(1).Text) - 1
        End If

En voor de prijzen opslaan kan je misschien even hiernaar kijken:
http://www.helpmij.nl/forum/showthread.php/633161-Configuratiebestanden-VB-NET

Het is misschien niet de nieuwste manier/snelste manier om iets op te slaan, maar het is wel redelijk makkelijk op deze manier...

Succes!

*EDIT*
Misschien kan je voor de voorgerechten/hoofdgerechten/etc ook beter een listview gebruiken... Dan kan je daarin ook nog een kolom met prijs hebben.


Ik heb toch nog iets: Bij de sub om bij de rekening te maken, mis je een paar handlers. Voeg na "Handles" dit toe: "lbVoorgerechten.MouseDoubleClick, lbHoofdgerechten.MouseDoubleClick, lbNagerechten.MouseDoubleClick, lbDrank.MouseDoubleClick".

En dit werkt beter bij form3:
Code:
Public Class frmProducts
    Private Sub Toevoegen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        If Not frmMain.TbCl.SelectedTab.Text = "Home" Then
            Dim lsbox As ListBox = CType(frmMain.TbCl.SelectedTab.Controls(0), ListBox)
            lsbox.Items.Add(txtArtikelAdd.Text)
            Me.Close()
        Else
            MessageBox.Show("Error:" & Chr(13) & "Kan geen gerechten in deze tab plaatsen.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Me.Close()
        End If
    End Sub

    Private Sub frmProducts_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        txtArtikelAdd.Text = Nothing
    End Sub
End Class

Dit maakt namelijk ook onderscheid tussen de verschillende tabs... Let wel op bij het toevoegen van de rekening: Als je een voorgerecht en hoofdgerecht met dezelfde naam hebt, dan komen die bij elkaar te staan (dus de hoeveelheid veranderd dan...).

Succes!


PS: Moet er niet ook een artikel verwijderen knop voor bij de tabcontrol en listboxen... Als een horeca gelegenheid namelijk nu een ander menu maakt, dan moeten ze alles opnieuw instellen... Dat hoeft nu nog niet, maar als je het opslaan hebt geregeld, dan wel natuurlijk......
 
Laatst bewerkt:
Moet ik dan ook de txtBox in Artikel Toevoegen wijzigen in iets anders?

*EDIT*
Ik heb toch nog iets: Bij de sub om bij de rekening te maken, mis je een paar handlers.
Welke sub is dat precies? De allerlaatse sub:
[CPP]Private Sub Voorgerechten_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim LsBox As ListBox = CType(sender, ListBox)

If LsBox.SelectedItems.Count = 1 Then
For i As Integer = 0 To lvRekening.Items.Count - 1 Step 1
If lvRekening.Items(i).SubItems(0).Text = LsBox.SelectedItem Then
lvRekening.Items(i).SubItems(1).Text = CInt(lvRekening.Items(i).SubItems(1).Text) + 1
Exit Sub
End If
Next

Dim LsViewItem As ListViewItem = New ListViewItem
LsViewItem.SubItems(0).Text = LsBox.SelectedItem
LsViewItem.SubItems.Add("1")
LsViewItem.SubItems.Add("Prijs")
lvRekening.Items.Add(LsViewItem)
End If
End Sub[/CPP]

Ik krijg een error. Ik heb het programma weer aangepast. Srry voor het ongemak. Ik zal de actuelste versie online zetten
 
Laatst bewerkt:
Nee hoor, misschien wel een textbox erbij voor de prijs...
 
Hoi,

Ik heb vandaag geen tijd meer om ernaar te kijken, dus dat wordt dan morgen middag...

MartinJM
 
Hoi,

Ik ben er nu aan bezig, maar weet je al hoe je de gerechten op wilt slaan?


En ik ben nu alsnog bijna heel je code aan het schrijven... Wat dus eigenlijk niet de bedoeling was.


MartinJM



Het is nu hier te vinden: http://screen.t15.org/Kerkrade/Menu%201.0.rar
 
Laatst bewerkt:
Ik wou de gerechten het liefst opslaan in een database tenzij jij een betere mogelijkheid hebt. Bedankt dat je toch de hele code schreef/schrijft/hebt geschreven.

*EDIT*
Als ik een gerecht toevoeg en bij de prijs vul ik in €2,50, staat het in de ListView als €2,00. Hoe kan dit? Wat moet er veranderd worden? Dan los ik dat zelf wel op.
 
Laatst bewerkt:
Ik denk dat het makkelijker is om niet te beginnen met een database... Databases zijn tamelijk moeilijk om te gebruiken en degene die het programma wil gebruiken moet dan ook de goede software op zijn/haar computer hebben staan.

Wat ik voorstel zijn ".ini"-bestanden of ".xml" bestanden.
Voor ".ini"-bestanden kan je even hiernaar kijken: http://www.helpmij.nl/forum/showthread.php/633161-Configuratiebestanden-VB-NET
Voor ".xml"-bestanden kan je even hiernaar kijken: https://www.google.nl/#hl=nl&sclient=psy-ab&q=visual+basic+xml+bestanden&oq=visual+basic+xml+bestanden&aq=f&aqi=&aql=&gs_l=hp.3...414l5814l0l6106l26l17l0l6l6l0l509l2251l9j6j1j5-1l22l0.&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=3cb193cac19eccb3&biw=1600&bih=674 (de bovenste 2 kan je in ieder geval overslaan)


Succes!


*EDIT*
Je moet alle komma's (",") vervangen door punten ("."). Dan zou het moeten werken.
 
Laatst bewerkt:
Oeps, 2 dingetjes fout gedaan: Ik heb toch integers gebruikt in plaats van doubles.. Daardoor heb ik ook punten en komma's omgegooid...

Hier het nieuwe project: http://screen.t15.org/Kerkrade/Menu%201.0.rar (Ik weet het: zelfde plaats, maar dat scheelt ruimte op mijn server....)

Succes!
 
Je bent ook de GridLines en FullRowSelect = true vergeten.
En hij geeft nu geen €-teken weer als ik €2,50 intik.

*EDIT*
Dat pas ik zelf wel aan. Nog 1 vraag. Ik wil ook een artikel verwijderen-knop. Zou je me die misschien ook willen maken en me kunnen uitleggen, desnoods via e-mail (sebastiaan.speck.159857@charlemagnecollege.nl), hoe het kan dat die Artikel_Toevoeg knop bij ieder Tab anders is terwijl er maar 1 form voor is.
 
Laatst bewerkt:
De layout lukt je zelf toch wel?? Dat is doorgaans het makkelijke deel :P


Dan begin ik met de laatste vraag: hoe het kan dat die Artikel_Toevoeg knop bij ieder Tab anders is terwijl er maar 1 form voor is?

Dat komt (vooral) door deze regel:
Code:
Dim lsview As ListView = CType(frmMain.TbCl.SelectedTab.Controls(0), ListView)
Hoe deze code uitgevoerd word:
Er wordt een listview aangemaakt met de naam "lsview".
Deze listview "lsview" wordt gelijk gesteld aan de listview in de regel erachter. Als je "lsview" aanpast, zal je dus ook de listview erachter aanpassen.
Het stuk achter het '='-teken:
Wat CType praktisch doet is dit: Het krijgt een waarde, en die convert hij naar een ander variable type. Hier krijgt hij dus de waarde "frmMain.TbCl.SelectedTab.Controls(0)" en die convert hij naar een listview.
Dan dit: "frmMain.TbCl.SelectedTab.Controls(0)"
Wat deze code doet is vrij makkelijk. Hij 'kijkt' in frmMain naar TbCl. Daarin kijkt hij welke Tab geselecteerd is. Dan kijkt hij naar de controls die er in die tab staan. Daarvan selecteert hij de eerste. Aangezien er maar 1 control per tab is, selecteert dit automatisch de goede control. Anders zou je eerst nog moeten kijken of het de goede control is.

Ik hoop dat je dat dan zo (een beetje) snapt.


Dan nog een artikel_verwijderen knop:
Je kan eerst 'kijken' of er een item in de listview in de geopende tab geselecteerd is. Als dat het geval is, dan kan je dat verwijderen. Met de codes die je al hebt zou je dat moeten kunnen maken. Alle stukjes code die je nodig hebt om dat te maken zitten al in het programma, maar dan in een verkeerde volgorde omdat het dan een andere functie heeft.


Dan het laatste punt: Ik heb persoonlijk nog nooit met XML gewerkt, dus ook voor mij is dat nieuw. Misschien omdat ik wat meer ervaring heb, is het wat makkelijker voor mij om te begrijpen, dus ik zal er naar gaan kijken. Maar zelf kan je natuurlijk altijd nog tutorials op internet volgen (Doe dat dan wel in een ander project zodat je je grote project niet sloopt). Als je het dan nog niet snapt kan je het natuurlijk altijd vragen, er zijn anderen hier die het wel snappen (geloof ik). Maar doe dat dan wel in het VB.NET forum. Daar zijn meer mensen die verstand hebben van VB.NET (VB.NET is visual basic 6.0 of hoger, dus ook visual basic 2010).


Je kan het natuurlijk ook hier vragen, maar dan heb je denk ik wel minder kans op (goed) antwoord....

Succes! MartinJM:thumb:


PS: Ik zou geen standaard gerechten invoeren, dat scheelt jou tijd, en de mensen die het willen gebruiken zullen ze waarschijnlijk allemaal verwijderen zodra ze het beginnen te gebruiken...


*EDIT*
Nog 1 ding: Schrijf nooit je email-adres zo, dan zullen er vrij snel spam mailtjes arriveren. Schrijf het apenstaartje ("@") beter als "[AT]" en de punt als "[DOT]".
 
Laatst bewerkt:
Mijn eigen. Hier (gratis) gehost: http://freehostingnoads.net/

Het is een beetje ingewikkeld om een account aan te maken, als je de knop onderaan de pagina niet ziet (iets van 3x ofzo...) ;)


Maar het voordeel van een eigen site is dat je veel meer controle over je bestanden hebt, en het is niet zo snel dat McAfee of een andere virusscanner de site als onveilig markeert...


MartinJM


*EDIT*
Dat kan je zelf toch ook bedenken?? Jij bent de maker :rolleyes:

Je kan misschien beter de form iets kleiner maken en dan alles iets dichter op elkaar zetten... Ook kan je misschien kijken naar hoe je programma zich gedraagt als je de grootte wijzigt...

Bij hoofdgerechten, nagerechten en bij drank is de listview niet mooi uitgelijnd. Totaal button zou je helemaal weg kunnen halen, dat wordt automatisch bijgewerkt. De code voor gerecht verwijderen is er nog niet. Wijzigingen opslaan knop zou ik weghalen. Ik zou het gelijk wijzigen als het toegevoegd/verwijderd word. Misschien ook een gerecht wijzigen knop maken.

De rekenmachine weghalen of zorgen dat die makkelijk met het toetsenbord bedient kan worden, dat is sneller, maar je kan de knoppen ook nog houden. Misschien obers wijzigen/naam erbij/toevoegen/verwijderen. Ook misschien in plaats van een knop dat er op de label geklikt moet worden. Misschien ook zorgen dat er geen lege naam/prijs ingevuld kan worden. Een prijs van 0 zou misschien wel moeten kunnen..


Ik denk dat je hier nog wel even mee bezig zal zijn :p Dan heb ik een beetje tijd voor XML en eigen projecten....
 
Laatst bewerkt:
Misschien handig om te weten voor in je listview en dergelijke, er is ook een format voor valuta:

Zo zal het denk ik in VB zijn ;p
Code:
Format(1.95, "C")


Misschien dat iemand voor deze knaap dit in VB omzetten :P

Product class om variabelen die bij elkaar horen bijeen te houden.
Code:
public class Product
{
	public int Id { get; set; }
	public string Name { get; set; }
	public string Description { get; set; }
	public double Price { get; set; }

	public Product(int id, string name, double price)
	{
		Id = id;
		Name = name;
		Description = "";
		Price = price;
	}
}

Nep products nadat ze uit een database of xml bestand zouden zijn geladen. Zo kun je alvast aan de slag voordat je je verdiept in database of xml programmeren.
Code:
public class ProductsRepository
{
	private readonly List<Product> _meals;
	private readonly List<Product> _drinks;

	public ProductsRepository()
	{
		_meals = new List<Product>
						{
							new Product(1, "Pizza Hawaii", 6.95),
							new Product(2, "Salade", 1.75),
							new Product(3, "Uitsmijter", 2.95),
							new Product(4, "Extra Brood", 0.25)
						};
						
		_drinks = new List<Product>
						{
							new Product(5, "Coca Cola", 1.40),
							new Product(6, "7up", 1.40),
							new Product(7, "Spa Rood", 1.10),
							new Product(8, "Hertog Jan", 1.40)
						};
	}

	public List<Product> GetMeals()
	{
		return _meals;
	}
	public List<Product> GetDrinks()
	{
		return _drinks;
	}
}
 
Volgens mij is het zo wel goed omgezet, maar ik heb het niet geprobeerd:
Code:
Public Class Product
    Public Id1 As Integer = 0
    Public Name1 As String = Nothing
    Public Description1 As String = Nothing
    Public Price1 As Double = 0

    Public Sub New(ByVal id As Integer, ByVal name As String, ByVal price As Double)
        Id1 = id
        Name1 = name
        Description1 = Nothing
        Price1 = price
    End Sub
End Class

Public Class ProductRepository
    Private _meals As List(Of Product)
    Private _drinks As List(Of Product)

    Public Sub ProductsRepository()
        _meals = New List(Of Product)

        _meals.Add(New Product(1, "Pizza Hawaii", 6.95))
        _meals.Add(New Product(2, "Salade", 1.75))
        'enz.

        _drinks = New List(Of Product)

        _drinks.Add(New Product(5, "Coca Cola", 1.4))
        _drinks.Add(New Product(6, "7Up", 1.4))
        'enz. (De laatste nul van 1.40 wordt automatisch weggehaald...)
    End Sub

    Public ReadOnly Property GetMeals() As List(Of Product)
        Get
            Return _meals
        End Get
    End Property

    Public ReadOnly Property GetDrinks() As List(Of Product)
        Get
            Return _drinks
        End Get
    End Property
End Class
Dit zijn beide classes...

Maar uiteindelijk, als het programma (bijna) klaar is, zal er toch eigenlijk wel een manier moeten zijn om de producten op te slaan....

MartinJM
 
Bedankt voor de moeite ;)

Yep, maar het idee is dat je deze repository kan uitbreiden tot je krijgt wat je nodig hebt. En dan kan hij de implementatie wijzigen zodat de producten uit een database gehaalt worden i.p.v. hardcoded. Op deze manier kan hij evengoed de class en methods hetzelfde houden en hoeft er niets te veranderen in de code die hier gebruik van maakt etc.

Later zou je met behulp van bv een IProductsRepository interface de producten kunnen aanbieden zodat je eenvoudig kan wisselen tussen sql/xml/txt etc dit maakt het testen een stuk aangenamer.
 
Ja maar gezien met hoeveel moeite de TS hier al heeft gehad dacht ik dat met misschien beter was om het makkelijk te houden...

En het omzetten is niet zoveel moeite. Het is praktisch overtypen in een andere volgorde... :p

MartinJM
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan