Ik heb met een csharp webform een eenvoudige photogallery gemaakt. Nu probeer ik deze om te zetten in een csharp class. Echter dit lukt mij niet, ik krijg errors. Momenteel krijg ik er 1 op de foreach. Ik weet hoe ik moet werken met classes en php, bij Csharp.net heb ik echter nog niet een goed idee van de werking van classes en methodes.
Wat is je fout, en als je naar de color coding kijkt zie je dat er fout op regel 33 zit (of komt dat door de highlighter hiet op sima?). De 2de @ is trouwens onnodig op diezelfde regel.
Ha ha, ik stond ook al een beetje raar te kijken van de highligting. Waarschijnlijk ligt dat aan sima, heb er in Visual Studio 2008 namelijk geen last van.
Ik heb die 2e @ neergezet, omdat anders het programma in een fout liep en dit dat voorkwam. Trouwens weet ook niet wat die @ precies doet, maar vond die oplossing op Google.
Dit is trouwens de relationele code, dus zonder gebruik van classes en methodes. Wil het graag omzetten om dat te leren.
De @ is om fouten te onderdrukken net zoals php, want een enkele \ geeft fouten, dit zou je kunnen oplossen door @ te gebruiken zoals je al doet of door \\ te gebruiken ipv \. Maar je zei dat er een foutmelding kwam, weet nog steeds niet welke foutmelding.
Dat werkt inderdaad, maar mijn eigenlijke vraag is: Hoe werk ik met classes en methodes met Csharp.net? Mijn rationele code werkt immers al. Ik heb al een opzetje proberen te maken(zie mijn eerste post), maar die code werkt niet. Hoe roep ik classen en methodes eigenlijk op met Csharp?
Abbas - 10/10/2009 13:02 (laatste wijziging 10/10/2009 13:19)
Bedankt voor de link naar de tutorial. Ik heb deze uitleg naast mijn code gelegd, maar zie mijn fout niet goed. Ik krijg momenteel een error op regel 55(foreach (string key in arGallery)):
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0030: Cannot convert type 'char' to 'string'
Het miraculeuze is juist dat het in de rationele code wel werkt en niet in de class. De fout zou dus gezocht moeten worden in de class.
De foutmelding spreekt duidelijk voor zich. Je probeert een char naar een string te converten. Zorg dat de beide variabelen van hetzelfde datatype zijn, ofwel allebei char ofwel allebei string.
Nja, dat begrijp ik wel, maar hoe kan het dan wel in de rationele code werken. In de class werkt het niet. Het gaat daar ergens mis, maar ik weet alleen niet waar. Ik defineer de array(arGallery) toch echt in de class constructor.
De foreach loop kun je vinden op regel 55 van de code die ik heb toegevoegd aan de topic vraag(eerste post van deze topic dus). Op regel 34 maak ik de array arGallery aan. Array arGallery zal in de methode later in de code opgeroepen worden.
Abbas - 16/10/2009 13:46 (laatste wijziging 16/10/2009 13:47)
Crew .NET
Waarom declareer je de variabelen opnieuw in de constructor van je klasse? Ze zijn als private gedeclareerd daarboven. In je constructor moet je alleen nog de waarde meegeven, niet opnieuw declareren!
Edit:
In je declaratie boven de default constructor moet je wel van arGallery een array maken, nu is het een gewone string.
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
// Import some classes
using System.IO;
/// <summary>
/// Summary description for Gallery
/// </summary>
public class Gallery
{
public int intCount;
public string strDirectDir = "";
public string strDir = "";
public string[] arGallery;
public Gallery()
{
//
// TODO: Add constructor logic here
//
string strDirectDir = "gallery";
string strDir = @"C:\Documents and Settings\admin\Mijn documenten\Visual Studio 2008\WebSites\Gallery\" + strDirectDir + @"\";
string[] arGallery = Directory.GetFiles(strDir, "*.bmp");
}
public int countPhotos(string arGallery)
{
int intCount = arGallery.Count();
return intCount;
}
public string view(int intCount, string arGallery, string strDirectDir)
{
if (intCount > 0)
{
int intPhotoCount = 1;
string strData = "";
foreach (string key in arGallery)
{
strData = strData + "<img src=\"" + strDirectDir + "/" + key.Replace(strDir, "") + "\" alt=\"" + intPhotoCount + "\" />";
intPhotoCount++;
}
return strData;
}
}
}
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Xml.Linq;
// Import some classes
usingSystem.IO;
/// <summary>
/// Summary description for Gallery
/// </summary>
publicclass Gallery
{
publicint intCount;
publicstring strDirectDir ="";
publicstring strDir ="";
publicstring[] arGallery;
public Gallery()
{
//
// TODO: Add constructor logic here
//
string strDirectDir ="gallery";
string strDir =@"C:\Documents and Settings\admin\Mijn documenten\Visual Studio 2008\WebSites\Gallery\"+ strDirectDir +@"\";
Kerel, wat zei ik in m'n vorige post?!?! Je moet de variabelen NIET OPNIEUW declareren in de default constructor en ze public maken heeft ook geen nut! Zo dus: