C# spara textbox väden i en class

Permalänk
Medlem

C# spara textbox väden i en class

Hejsan här kommer jag igen med en liten fråga om C#

Nu är det så har att jag har två fönster. Dessa två fönster vill jag ska ha tillgång till samma variablar. Jag har löst det på så vis att jag har skapat en class där jag har variablarna.

Men det ser inte ut att fungera. Det känns som om det ena fönstret inte kan hämta variabel värderna från min class.

här kommer exempel kod

I class filen

class Class1 { private string Random; public string random { get { return Random; } set { Random = value; } } }

I fönster1

Class1 MinClass = new Class1(); textbox.Text = MinClass.Random;

I fönster2

Class1 MinClass = new Class1(); label1.Text = MinClass.Random;

Så det jag vill göra är att spara text från en textbox i fönster1 i class variablen Random och sen skriva ut det på det andra fönster2s label.

Hoppas jag har formulerat mig rätt nu så nu förstår

MVH//T0ddan

Visa signatur

PSN: todddan Adda gärna

Permalänk

Re: C# spara textbox väden i en class

Citat:

Ursprungligen inskrivet av t0ddan
Hejsan här kommer jag igen med en liten fråga om C#

Nu är det så har att jag har två fönster. Dessa två fönster vill jag ska ha tillgång till samma variablar. Jag har löst det på så vis att jag har skapat en class där jag har variablarna.

Men det ser inte ut att fungera. Det känns som om det ena fönstret inte kan hämta variabel värderna från min class.

här kommer exempel kod

I class filen

class Class1 { private string Random; public string random { get { return Random; } set { Random = value; } } }

I fönster1

Class1 MinClass = new Class1(); textbox.Text = MinClass.Random;

I fönster2

Class1 MinClass = new Class1(); label1.Text = MinClass.Random;

Så det jag vill göra är att spara text från en textbox i fönster1 i class variablen Random och sen skriva ut det på det andra fönster2s label.

Hoppas jag har formulerat mig rätt nu så nu förstår

MVH//T0ddan

Problemet är att du instansierar Class1 två gånger. Det blir då två separata objekt som inte innehåller samma sak.

För att göra det du vill så får du skicka med de värden du vill överföra från fönster1 till fönster2 via en parameter.

Visa signatur

Om man tänker en tanke, så är den tanken inte den tanke man tror att man tänker. Utan det är den tanke som får en att tro att man tror den tanke man tror att man tänker.

Permalänk
Medlem

Eller göra om Class1 till en singleton:

public sealed class Class1 { static Class1 instance = null; static readonly object padlock = new object(); private static string random; Class1() {} public static Class1 Instance { get { lock(padlock) { if (instance==null) { instance = new Singleton(); } return instance; } } } public string Random { get { lock(padlock) { return instance.random; } } } set { lock(padlock) { instance.random = value; } } } } ... /* Användning: */ Class1 c = Class1.Instance; c.Random = "Ghaaa";

Permalänk

Singleton är ett utmärkt sätt att lösa vissa situationer, men jag är inte säker på om detta är en sådan situation.

Singleton ska endast användas där klassen ifråga är "unik" och "single" _inom_ applikationen, dvs. samma instans bör, ska och måste användas från flera olika klasser.

Ett bra exempel är t.ex. en klass som sköter navigeringen inom applikationen.

EDIT: Jag är ganska säker på att trådskaparens problem kan lösas på bättre sätt.

Visa signatur

"Mies saa kaatua mutta ei karata." -- Adolf Ehrnrooth IR 7, Äyräpää 1944.

Permalänk
Medlem

Kanske en lite dum fråga men jag är ny på programmering och C# hur överför man värden via en parameter?

Visa signatur

PSN: todddan Adda gärna

Permalänk
Medlem

Det är viktigt att skilja på en instans av en klass och klassen själv. Om du t.ex. låtsas att du har ett äpple i handen så är Äpple en klass som alla äpplen hör till, medan just det äpplet som du håller i är en instans av klassen Äpple. Du kan se en klass som en mall som du använder för att skapa objekt. I det här fallet så är Class1 din klass, medan MinClass är en instans av klassen. Däremot så skapar du två instanser av Class1 som båda heter MinClass, och eftersom de är två separata objekt så har de varsin separat klassvariabel som heter Random. Det går att deklarera variabler som static, och då kan man se det som att de variablerna hör till klassen istället. Dvs. en static-variabel delas av alla instanser av en klass. Så om du skriver om din Class1 till att använda static istället så ser det ut så här:

class Class1 { private static string random; public static string Random { get { return Random; } set { Random = value; } } }

Då kan du använda Class1.Random direkt, utan att skapa en instans av klassen. I det här fallet så kommer detta att fungera som du vill, men det blir lätt rörigt och är inte särskilt snyggt. Ett bättre sätt är att göra som Prizephitah säger, och skicka över datan via en parameter till fönstren. Du kan göra detta genom att låta fönstren ha en metod (funktion) som tar emot värdet som en parameter, och sen anropar du den metoden när du vill ändra värdet i något av fönstren. Eftersom du är ny på programmering så kanske det inte är så självklart hur du ska göra, men fortsätt plugga bara så kommer det

PS. Jag programmerar inte C# själv, så jag tar inget ansvar för mina kodexempel

Permalänk
Medlem

Ett litet tips också är att inte använda ordet Random' som variabelnamn eftersom det är namnet på en fördefinierad klass. Kan bli komplikationer, och skapar också förvirring.

EDIT: Tänk också på att C#-kod är case sensetive. Som det ser ut i din kod så försöker du anropa det privata fältet Random, vilket borde ge dig kompileringsfel. Pröva istället med litet r i ditt propertyanrop. Fast då är jag nästan säker på att det krockar med den fördefinierade klassen. Byt helst variabelnamn på både fält och property till något som inte är upptaget.

Visa signatur

AMD Athlon 64 3k+, ASUS A8N-SLI deluxe, NVIDIA GeForce 6200 TurboCache, Q-TEC PSU 650W, NVIDIA nForce nätverkskort, SB Audigy 2, 2 x 1GB Corsair PC3000 DDR-SDRAM, WD Raptor 36.7GB SATA 8MB 10k RPM och Maxtor 200GB SATA

Permalänk
Medlem

Tackar så mycket för hjälpen.

Jag håller på med ett slutprodjekt till programmering B och gör ett medlems register mot en databas. Känner att jag har lärt mig en hel del nu på kort tid.

Tyckte att programmering var tråkigt fram tills nu när en del grejer faller på plats, nu vill jag bara lära mig mer. Är kanske lite sen på gröten men men.

PepperX: Dom kod exemplerna var bara exempel jag har andra variabel namn på mina variablar

Edit: Hmm det vill inte funka som jag vill även med static jag får samma fel att label bara "försvinner" asså att den visar Class1.Random som en tom variabel.

Om ni undrar varför jag behöver göra allt det här. Är det för att jag skapar ett inlognings fönster där man ska logga in på sin databas.

Visa signatur

PSN: todddan Adda gärna

Permalänk
Citat:

Ursprungligen inskrivet av t0ddan
Tackar så mycket för hjälpen.

Jag håller på med ett slutprodjekt till programmering B och gör ett medlems register mot en databas. Känner att jag har lärt mig en hel del nu på kort tid.

Tyckte att programmering var tråkigt fram tills nu när en del grejer faller på plats, nu vill jag bara lära mig mer. Är kanske lite sen på gröten men men.

PepperX: Dom kod exemplerna var bara exempel jag har andra variabel namn på mina variablar

Edit: Hmm det vill inte funka som jag vill även med static jag får samma fel att label bara "försvinner" asså att den visar Class1.Random som en tom variabel.

Om ni undrar varför jag behöver göra allt det här. Är det för att jag skapar ett inlognings fönster där man ska logga in på sin databas.

För att skicka variabler till en Form så är det bara att göra en konstruktor som tar parametrar.

public class Window2 : Form { ... public Window2(DTO dto) { överför variabler mm. } ... }

Sen när du ska skicka med variablerna till Formen behöver du bara göra:

Window2 w2 = new Window2(dto);

dto står för DataTransferObject Wikipedia

Visa signatur

Om man tänker en tanke, så är den tanken inte den tanke man tror att man tänker. Utan det är den tanke som får en att tro att man tror den tanke man tror att man tänker.

Permalänk
Medlem

Jag har en fråga till nu, vet någon hur man listar tabeller från en databas i en listbox även här har jag testat mig fram och sökt runt utan någon större lycka.

Visa signatur

PSN: todddan Adda gärna

Permalänk
Medlem

Du får loopa ut värdena helt enkelt. För varje post i tabellen så skapar du ett nytt list item. Eller(?)

Permalänk
Medlem

Hejsan

nu kommer jag med ännu ett problem. Min datagridview vill inte spara min data i min databas.

här är min kod

// connection string string SqlConnectionString = "Data Source=" + SqlClass.server + ";" + "user id=" + SqlClass.username + ";" + "pwd =" + SqlClass.password + ";" + "Initial Catalog=" + SqlClass.database + ";"; //Skapar och öppnar anslutning till databasen SqlConnection Conn = new SqlConnection(SqlConnectionString); Conn.Open(); //Skapar en string med kommando till sqldatabasen SqlDataAdapter da = new SqlDataAdapter("select * from medlemmar", Conn); SqlCommandBuilder cb = new SqlCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds,"medlemmar"); DataTable dt = ds.Tables["medlemmar"]; dataGridView1.DataSource = ds.Tables[0]; da.Update(dt);

Jag tackar igen för allt hjälp. Värst vad alla är hjälp samma i denna forums del och det tackar och bugar man för

Visa signatur

PSN: todddan Adda gärna