JJymdisMedlem sedan mars 20016 260 inlägg 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.
SSPiNMedlem sedan mars 20007 896 inlägg 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.
JJonMedlem sedan juli 20011 304 inlägg 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 :)
JJymdisMedlem sedan mars 20016 260 inlägg 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.
RrenholmMedlem sedan apr. 20012 266 inlägg 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...
JJymdisMedlem sedan mars 20016 260 inlägg 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.
RrenholmMedlem sedan apr. 20012 266 inlägg 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.
JJymdisMedlem sedan mars 20016 260 inlägg label5.Text = ((Bil)lager[0]).Marke;
"den angivna omvandlingen är inte giltig".
RrenholmMedlem sedan apr. 20012 266 inlägg Läskigt med svenska felmeddelanden :)
Hur ser det ut när du lägger till dem i din ArrayList?
JJymdisMedlem sedan mars 20016 260 inlägg 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? ;)
RrenholmMedlem sedan apr. 20012 266 inlägg vad retunerar nb.ShowDialog() ? Bil eller Fordon?
JJymdisMedlem sedan mars 20016 260 inlägg 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.
RrenholmMedlem sedan apr. 20012 266 inlägg 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.
JJymdisMedlem sedan mars 20016 260 inlägg 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? :)
JJonMedlem sedan juli 20011 304 inlägg Vänd på det:
if (((Fordon)o).Regnr.StartsWith(Contacts.SelectedItem))
:)
JJymdisMedlem sedan mars 20016 260 inlägg Är du säkert på det?
Det finns alltså fler värden i listContacts, den bara börjar med regnr?
JJonMedlem sedan juli 20011 304 inlägg 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.
JJymdisMedlem sedan mars 20016 260 inlägg
lager.cs(538): 'object' does not contain a definition for 'StartsWith'
Å det gäller listContacts.SelectedValue då.
JJonMedlem sedan juli 20011 304 inlägg Vad händer om du slänger på en .ToString() på den då?