webForumDet fria alternativet

C# GUI

.NETur .NET

24 svar · 587 visningar · startad av Jymdis

Medlem sedan mars 20016 260 inlägg
Frågan#1

Hej!

Nu har jag börjat med windows application och stöter på ett problem direkt. När jag försöker komma åt kontrollerna (exempelvis en knapp) ifrån egna metoder så funkar det inte, varför inte?

		private static void Uppdatera()
		{
			button1.Click();

		
		}

fungerar exempelvis inte. Tankefel från mig helt säkert, men nån får gärna förklara varför.

Medlem sedan mars 20007 896 inlägg
#2

Den måste vara definierad som en instansvariabel, alltså i klassen - och inte i någon metod - för att du ska kunna nå den från hela klassen.

Medlem sedan juli 20011 304 inlägg
#3

Har du dragit ut den från designern till din form är den private, så det borde inte vara några problem. Vad är det du försöker åstadkomma och var ligger funktionen Uppdatera() och varför är den statisk?

Visa hela koden :)

Medlem sedan mars 20016 260 inlägg
#4

Uppföljningsfråga:
Jag har en ArrayList som heter lager, vari det ligger objekt av två olika typer (MC och Bil.
Jag behöver ha ut objekten och deras värden för att jämföra.

Exempelvis, jag har en Listbox och vill skriva ut världen i labels när jag väljer en rad i denna (som motsvaras av ett objekt).

Om ni inte fattar nåt, hojta så postar jag koden.

Medlem sedan apr. 20012 266 inlägg
#5

I sann OOP anda bör du då ha en klass som MC och Bil ärver ifrån, denna klass kan t.ex döpas till Fordon och innehåller properties som är gemensamt för MC och Bil. På så sätt kan du skriva ut dessa värden utan att bry dig om i fall det är en bil eller MC. Om du sedan villk ontrollera vad som är vad går det att göra med:

if (lager[0] is Bil)
   // gör något i fall det är en bil
else (lager[0] is MC)
   // i fall det är en mc...
Medlem sedan mars 20016 260 inlägg
#6

Jo, i sann OOP andrahar jag en klass som heter precis Fordon.

men skriver jag då exmpelvis o.Värde (där o är for each object o in lager så att säga) så funkar inte det?

För att förtydliga;
hur gör jag för att få objektet lager så jag kan använda det och dess värden? Fordon är en abstrakt klass.

	foreach (object o in lager)
			{
				if (o is Bil)
				{
				label5.Text = (Bil)o.Marke;
				}
				if (o is MC)
				{}
			}

Fungerar ju inte. (Bil)o.Marke blir fel.

Medlem sedan apr. 20012 266 inlägg
#7

För att du ska kunna få ut ett värde ur Bil måste du göra så här:

((Bil)o).Marke

För att kunna få ut fordon på engång utan att behöva använda () kan du skapa en egen Collection, vilket är snyggast.

Medlem sedan mars 20016 260 inlägg
#8
label5.Text = ((Bil)lager[0]).Marke;

"den angivna omvandlingen är inte giltig".

Medlem sedan apr. 20012 266 inlägg
#9

Läskigt med svenska felmeddelanden :)

Hur ser det ut när du lägger till dem i din ArrayList?

Medlem sedan mars 20016 260 inlägg
#10
r = new StreamReader("lager.dat");
					BinaryFormatter bf = new BinaryFormatter();
					ArrayList temp = (ArrayList)bf.Deserialize(r.BaseStream);
					foreach (object o in temp)
						lager.Add(o);

exempelvis!

och

NyBil nb = new NyBil();
			Fordon o = nb.ShowDialog();
			Add(o);

inget som säger särskilt mycket va? ;)

Medlem sedan apr. 20012 266 inlägg
#11

vad retunerar nb.ShowDialog() ? Bil eller Fordon?

Medlem sedan mars 20016 260 inlägg
#12

nb.ShowDialog() returnerar en bil!
men där finns också nm.ShowDialog() som returnerar en MC.
Alltså finns det både Bil och MC i arraylisten.

Medlem sedan apr. 20012 266 inlägg
#13

ok, tänkte att det kanske blev fel där, att den retunera något annat. Verkar konstigt att du får fel när du försöker läsa ett värde.

Medlem sedan mars 20016 260 inlägg
#14

mmm lite mysko är det :)

Medlem sedan mars 20016 260 inlägg
#15

Det var ett felaktigt objekt som castades. Därav felmeddelandet.
Sista frågan nu då, sen är allt klart:

if (((Fordon)o).Regnr == listContacts.SelectedItem)

Vilket inte är rätt, vad jag vill ha egentligen är:

if (((Fordon)o).Regnr == listContacts.SelectedItem.StartsWith)

eller hur man ska säga. Jag vill true ska vara om listContacts startar med regnr. Hur gör djur, eller man? :)

Medlem sedan juli 20011 304 inlägg
#16

Vänd på det:

if (((Fordon)o).Regnr.StartsWith(Contacts.SelectedItem))

:)

Medlem sedan mars 20016 260 inlägg
#17

Är du säkert på det?

Det finns alltså fler värden i listContacts, den bara börjar med regnr?

Medlem sedan juli 20011 304 inlägg
#18

Aha! Missläste lite.
Menar du att t.ex Regnr är: ooj386 och värdena i Contacts är ooj, ook ocksåvidare? då blir det:

if (Contacts.SelectedValue.StartsWith((Fordon)o).Regnr))

Annars: berätta hur värdena ser ut.

Medlem sedan mars 20016 260 inlägg
#19

lager.cs(538): 'object' does not contain a definition for 'StartsWith'

Å det gäller listContacts.SelectedValue då.

Medlem sedan juli 20011 304 inlägg
#20

Vad händer om du slänger på en .ToString() på den då?

137 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)