Hej Lägg MyString1 som en medlemsvariabel i klassen: Tack för svaret. Det låter som att du har dragit ut två knappar på sidan. För att just det bifogade exemplet ovan ska fungera måste du först trycka på Button1 och sedan på Button2. När du flyttar Button2 till en annan klass så har du säkert glömt att registrera dig på knappens click event. Jo, jag har två knappar - och man måste trycka på först den ena, sen den andra. Det är det som jag vill uppnå. Om jag måste ha klass(er), ska funktionerna ligga i varsin klass eller i en gemensam. Det finns liksom en tanke med objektorientering som kallas inkappsling. Dvs man skall inte komma åt saker hur som helst. Så har du variabler inne i ett objekt så skall inte andra objekt veta om dem. De skall över huvud taget inte bry sig! Vill du nå något i ett objekt får du skapa publika properties. Tack så mycket för era svar. Det uppskattas verkligen. Är v-klassen din code-behind-klass? (Som anges i Inherits attributet i @Page-direktivet.) För ett aspx-script skapas bara ETT objekt av EN klass (antar klassen v). Det existerar helt enkelt inget objekt av klassen t. Nu lärde man sig nått! Att spara variabler i Viewstate var nått jag inte visste. Lysande. Ska genast slå upp kapitlet i dot.net-boken och läsa på (+ kapitlet om session). vad händer om du skriver: Joakim, din kod är samma som jag bifogade i ett tidigare inlägg i denna tråd. Att ändra variabeln MyString1 till public gör ingen skillnad. Resultatet blir samma felmeddelande som tidigare...Skicka värden mellan funktioner
Jag har kört fast och behöver hjälp. Har följande upplägg:
Jag vill att att funktion ett sätter ett värde i en variabel. Sen vill jag att en annan funktion använder det värdet. Låter enkelt men hur gör jag det på bästa sätt?
Typ något liknande:// Funktion 1
public void Button1 (Object sender, EventArgs e)
{
string MyString1= "foo";
}
// Funktion 2
public void Button2 (Object sender, EventArgs e)
{
string MyString2 = MyString1;
MyLabel.Text = MyString2;
}
// Smyken
Sv: Skicka värden mellan funktioner
private string MyString1;
// Funktion 1
public void Button1 (Object sender, EventArgs e)
{
MyString1= "foo";
}
// Funktion 2
public void Button2 (Object sender, EventArgs e)
{
string MyString2 = MyString1;
MyLabel.Text = MyString2;
}
Sv:Skicka värden mellan funktioner
Har dock försökt denna lösning tidigare men får det inte att fungera.
Om jag gör precis som du säger, får inte funktion 2 något värde, dvs MyLabel är fortfarande tom.
Om jag istället lägger funktionerna i en egen class så får jag felmeddelande CS0117: 'ASP.NewFile_aspx' does not contain a definition for 'Button2'
Sv: Skicka värden mellan funktioner
Sv:Skicka värden mellan funktioner
Så här ser hela klabbet ut just nu (med en gemensam klass):<script runat="server">
class foo
{
private string MyString1;
// Funktion 1
public void DoButton1 (Object sender, EventArgs e)
{
MyString1 = "foo";
MyLabel.Text = MyString1;
}
// Funktion 2
public void DoButton2 (Object sender, EventArgs e)
{
string MyString2 = MyString1;
MyLabel.Text = MyString2;
}
}
</script>
<html>
<body>
<form runat="server">
<asp:button id="Button1" onclick="DoButton1" text="button1" runat="server" />
<asp:button id="Button2" onclick="DoButton2" text="button2" runat="server" />
<br />
<asp:label id="MyLabel" runat="server" />
</form>
</body>
</html>
Om jag, som sagt, tar bort klassen foo (och låter funktionerna ligga utanför egendefinierad klass) så får funktionen 2 inget värde av funktionen 1. Och har jag klassen foo så får jag ovan nämnda felmeddelande.
Vad gör jag för fel?
Sv: Skicka värden mellan funktioner
Exempelvis
<code>
'class 1 ....
public string getMyString1
{
get {return MyString1;}
}
'class 2....
'Du når variablen från klass två enligt nedan
instansen_av_klass_ett.getMyString1
</code>Sv:Skicka värden mellan funktioner
Jag har tidigare försökt att med "get" nå min variabel (på det sätt jag tror Benny menar, men får då felmeddelande: dvs CS0117: 'ASP.NewFile_aspx' does not contain a definition for 'DoButton1. Och då blev jag osäker på hur koden ska se ut. Kanske tänkte jag fel.
Nu ser mitt kodexempel ut som nedan, men får fortfarande felmeddelandet. Varför? Jag har ju en metod för "DoButton1" (i "class t")!?class t
{
private string MyString1;
public string getMyString1
{
get {return MyString1;}
}
// Funktion 1
public void DoButton1 (Object sender, EventArgs e)
{
MyString1 = "foo";
MyLabel.Text = MyString1;
}
}
class v
{
// Funktion 2
public void DoButton2 (Object sender, EventArgs e)
{
MyString2 = t.getMyString1;
MyLabel.Text = MyString2;
}
}
Sv: Skicka värden mellan funktioner
Men ditt ursprungsproblem tror jag har att göra med att du måste tänka på att efter varje knapptryckning startar koden igen, och inga gamla värden finns kvar om de inte:
1. Är static (INTE bra eftersom alla besökare då delar på samma variabel).
2. Placeras i ViewState (funkar bara om nya postbacks görs från samma formulär, vilket i och för sig verkar vara ditt aktuella fall).
3. Placeras i Session (funkar även om du återkommer till detta script senare och trycker på button2).// Funktion 1
public void Button1 (Object sender, EventArgs e)
{
ViewState["MyString1"] = "foo";
}
// Funktion 2
public void Button2 (Object sender, EventArgs e)
{
string MyString2 = (string)ViewState["MyString1"];
MyLabel.Text = MyString2;
}
Sv:Skicka värden mellan funktioner
Sen vad gäller klasshanteringen så är jag fortfarande förvirrad. Tror jag får återkomma med en annan tråd angående detta spännande, men svåra, ämne senare...Sv: Skicka värden mellan funktioner
class foo
{
public string MyString1;
// Funktion 1
public void DoButton1 (Object sender, EventArgs e)
{
MyString1 = "foo";
MyLabel.Text = MyString1;
}
// Funktion 2
public void DoButton2 (Object sender, EventArgs e)
{
string MyString2 = MyString1;
MyLabel.Text = MyString2;
}
}
Sv:Skicka värden mellan funktioner
CS0117: 'ASP.NewFile_aspx' does not contain a definition for 'DoButton2'