Archief - [C#] Album Generator

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

wartaal

Legacy Member
Hey,

Ik zit dus met het volgende probleem.

Ik heb dus een button waarmee ik mappen aanmaak, nu wil ik wanneer er al mappen bestaan in mijn hoofdmap (waar hij dus alle mappen in opslaat, dit is nu gewoon in de Debug) dat hij die in een ComboBox (of als er een andere soort dropdown is, is dat ook goed) zet, zodat ik ze daar kan selecteren om eventueel de naam e.d. aan te passen/ of gewoon te verwijderen.

Iemand enig idee? Ik dacht iets met GetDirectory, maar ik vind niks dat werkt (mijn Combobox blijft gewoon leeg).

Alvast erg bedankt!

Krueger

Legacy Member
var dirs = Directory.GetDirectories("c:\\");
foreach (var dir in dirs)
comboBox1.Items.Add(dir);

is het zoiets dat je wil?

wartaal

Legacy Member
Ik denk het, maar als ik jou code toepas, blijft mijn comboBox nog steeds leeg, en dat is niet de bedoeling.

Krueger

Legacy Member
Dan heb je waarschijnlijk ergens anders nog een fout, kan je je code eens posten?

wartaal

Legacy Member
ComboBox
Code:
private void selectAlbum_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Zoek alle mappen op en zet ze in combobox
            var dirs = Directory.GetDirectories("C:\\");
            foreach (var dir in dirs)
                selectAlbum.Items.Add(dir);
           }

Of moet ik die code ergens anders in plaatsen?

Code om mijn mappen aan te maken
Code:
private void CreateAlbum_Click(object sender, EventArgs e)
        {
            //Lees ingegeven tekst in
            string sName = this.textName.Text;
            string sAuteur = this.textAuteur.Text;
            string sTags = this.textTags.Text;
            string sCategory = this.textCat.Text;
            string sOmschrijving = this.textOmsch.Text;
            Album album = new Album(sName);
            album.SName = "";

            //Maak map aan voor album
            System.IO.Directory.CreateDirectory(sName);
        }

Tyfius

Legacy Member
Volgens mij moet je het invullen van je combo box ook eens doen buiten die event. Als je selectie niet veranderd wordt deze niet opgeroepen.

[neut]En het gebruik van var is icky en totaal overbodig.[/neut]

Krueger

Legacy Member
Ik zou dat idd in een andere event doen, vb. in de load van je form ofzo.
En wat is er mis met daar var te gebruiken? Persoonlijk vind ik er niets icky aan eigenlijk. Het typt sneller, en hier vind ik de code er door niet minder duidelijk ofzo.
EDIT: toch nog es bijschrijven waarom het niet mag staan in de indexchanged: als er geen elementen in je combobox zitten, kan je ook geen ander selecteren, en zal dus nooit de index veranderen. Dus wordt dat event niet opgeroepen, en je combobox niet uitgebreid.

Tyfius

Legacy Member
Krueger zei:
Ik zou dat idd in een andere event doen, vb. in de load van je form ofzo.
En wat is er mis met daar var te gebruiken? Persoonlijk vind ik er niets icky aan eigenlijk. Het typt sneller, en hier vind ik de code er door niet minder duidelijk ofzo.
Het heeft zijn voordelen, maar overgebruik in team verband leidt al snel tot onduidelijkheden. Ik spreek uit persoonlijke ervaring, net zoals deze post heb ik met ReSharper ook minder goede ervaringen als het op var aankomt.

wartaal

Legacy Member
Ok, bedankt, twerkt :D

Maar nu, kan ik daar ook gewoon de mapnaam uitfilteren? Want nu krijg ik het hele pad in mijn combobox.

Tyfius

Legacy Member
Normaal kan je die string die je als resultaat hebt met DirectoryInfo of Path wel analyzeren en alleen het nodige eruit halen.

Krueger

Legacy Member
Zoals Tyfius zegt kan je het op een mooie manier doen. Een vuile manier is zoiets:
comboBox1.Items.Add(dir.Substring(dir.LastIndexOf('\\') + 1));

wartaal

Legacy Member
Ok volgende vraag. Ik kan nu met een openfiledialog foto's selecteren en ook kan ik al een album kiezen. Nu hoe kan ik de foto's in dat geselecteerde album opslaan?

Ik heb er een button voor (Addpics) maar zit nu dus een beetje vast. Welke code kan ik dus het best gebruiken om deze te koppelen?

Al zeker bedankt voor de vorige hulp!

Krueger

Legacy Member
Erm, ik snap de vraag niet echt. Kan je ze eens anders verwoorden plz.

Obliv`

Legacy Member
wartaal zei:
Ok, bedankt, twerkt :D

Maar nu, kan ik daar ook gewoon de mapnaam uitfilteren? Want nu krijg ik het hele pad in mijn combobox.

Lees deze beide links best even eens door:
DirectoryInfo Members (System.IO)
Path Class (System.IO)

Je krijgt de mapnaam van je directory in je combobox door de display property te gebruiken, zet ze op "Name" in dit geval.

Met behulp van de Path class uit de System.IO namespace kan je ook veel manipulaties doen op files (extensies veranderen etc) en directories.

Obliv`

Legacy Member
wartaal zei:
Ok volgende vraag. Ik kan nu met een openfiledialog foto's selecteren en ook kan ik al een album kiezen. Nu hoe kan ik de foto's in dat geselecteerde album opslaan?

Ik heb er een button voor (Addpics) maar zit nu dus een beetje vast. Welke code kan ik dus het best gebruiken om deze te koppelen?

Al zeker bedankt voor de vorige hulp!

Je doet je naam alle eer aan ;)

Moto

Legacy Member
Het heeft zijn voordelen, maar overgebruik in team verband leidt al snel tot onduidelijkheden. Ik spreek uit persoonlijke ervaring, net zoals deze post heb ik met ReSharper ook minder goede ervaringen als het op var aankomt.
Resharper kunt ge instellen om het niet te komen vragen,
Zie trouwens niet in hoe var een probleem kan zijn, het probleem zal dan wel ergens anders liggen in de code

Zal ook eens effe neuten
//Zoek alle mappen op en zet ze in combobox
var dirs = Directory.GetDirectories("C:\\");
foreach (var dir in dirs)
selectAlbum.Items.Add(dir);

Nederlands = not done
loops zonder { .. } = not done
Kan trouwens met Linq in 1 statement :)

Krueger

Legacy Member
Moto zei:
Resharper kunt ge instellen om het niet te komen vragen,
Zie trouwens niet in hoe var een probleem kan zijn, het probleem zal dan wel ergens anders liggen in de code

Zal ook eens effe neuten
//Zoek alle mappen op en zet ze in combobox
var dirs = Directory.GetDirectories("C:\\");
foreach (var dir in dirs)
selectAlbum.Items.Add(dir);

Nederlands = not done
loops zonder { .. } = not done
Kan trouwens met Linq in 1 statement :)

Sta me toe om terug te neuten.
Waarom is nederlands not done? Als het een eigen project is, zie ik niet in waarom commentaar niet in het nederlands zou mogen.
Wat is er mis met een loop zonder {}. Het is 1 regel, visual studio zorgt voor de juiste indentatie, dus geen verwarring mogelijk.
Kan je het ook met 1 linq statement even performant? ( ik weet dat het absoluut niet zwaar is wat er hier gebeurd, maar ik sta nu ook even in miereneukmodus).

Messias.

Legacy Member
Moto zei:
Kan trouwens met Linq in 1 statement :)

Maar gebruik liever lambda expressies. :)

Nederlandse in code, doe het niet. Echt. Om het af te leren moet ge maar eens een programma debuggen waarin alle variabelen en commentaar in het Zweeds geschreven zijn. Gebruik Engels. En hungarian is een dikke nono. Bovendien is het in een statisch getypeerde programmeertaal nog eens compleet redundant. Visual Studio kan u — nog voor het compileren — op gelijk welk moment vertellen van welk type een variabele is.

Moto

Legacy Member
Maar gebruik liever lambda expressies
dat bedoel ik met Linq, niet die voze query syntax

Waarom is nederlands not done? Als het een eigen project is, zie ik niet in waarom commentaar niet in het nederlands zou mogen.
Slechte gewoonte afleren, engels of nederlands is toch geen probleem, waarom dan nederlands gebruiken, zelfs bij nederlandstalige projecten gebruik ik engelstalige benamingen in de code :p
Wat is er mis met een loop zonder {}. Het is 1 regel, visual studio zorgt voor de juiste indentatie, dus geen verwarring mogelijk.
Verwarring is er altijd sneller dan gewoon de {}, is gewoon minder leesbaar
Kan je het ook met 1 linq statement even performant? ( ik weet dat het absoluut niet zwaar is wat er hier gebeurd, maar ik sta nu ook even in miereneukmodus).
Nee is zeker niet even performant, en extra zaken om mee rekening te houden zoals deferred execution, maar die paar milliseconden zullen het hier niet maken.
Performance problemen zitten bijna nooit in deze functies (meestal DB + Gui-updates)

wartaal

Legacy Member
Krueger zei:
Erm, ik snap de vraag niet echt. Kan je ze eens anders verwoorden plz.
Wel, gewoon foto's selecteren vanuit een andere locatie op je computer en dat wanneer je op een button klikt, deze foto's verplaatst worden naar een map die ik via een combobox selecteer.

Snap je t een beetje? :p Ik weet niet hoe ik het beter zou kunnen uitleggen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan