C# Methoden Fehler GUI

Neue Frage »

Auf diesen Beitrag antworten »
InformaTiger C# Methoden Fehler GUI

Hallo,
ich bin gerade am programmieren eines Hunderennens und habe dabei folgendes Problem:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public bool Laufen()
{
// Random generieren
Random aZufallsgenerator = new Random();

aDistanz = aZufallsgenerator.Next(1,5);
Point aPostiton = aHundebild.Location;
aHundebild.Location.X += aDistanz;
aHundebild.Location = aPostiton;
}


In der 8 Zeile gibt mir der Kompiler folgende Fehlermeldung aus:

Zitat:
Der Rückgabewert "System.Windows.Forms.Control.Location" kann nicht geändert werden, da er keine Variable ist.


Ich habe dasselbe auch schon mit nur "X" versucht, hat allerdings auch nicht funktioniert. Laut meinem Buch wo das ich das ganze her hab müsste der Code eigentlich funktionieren.

Lg
InformaTiger
 
Auf diesen Beitrag antworten »
Karlito

Hi,

ich glaube Du machst da einen kleinen Fehler...

Du speicherst richtigerweise die Position in einer neuen Variable (aPosition). Es ist bestimmt ein flüchtigkeitsfehler, dass du danach X in aHundeBild.Location anzupassen versuchst. Du musst aPosition.X anpassen und dann die Location-Eigenschaft von aHundBild überschreiben.

Probiere
code:
1:
2:
3:
aPosition.X += aDistanz;


Klar warum?

VG,

Karlito
Auf diesen Beitrag antworten »
InformaTiger

Das heißt, aPosition ist gar keine Variable (sondern ein Objekt?).

code:
1:
2:
3:
4:
aPosition.X += aDistanz;
aHundebild.Location = aPosition.X;


Würde das dann so stimmen?
Oder muss da an aHundebild.Location auch noch das X ran?

Lg
InformaTiger
Auf diesen Beitrag antworten »
Karlito

Hallo,

Location ist ein struct vom Typ Point. Structs sind Datenstrukturen. Wenn du in C# Eigenschaften hast, welche Structs zurückgeben, so erhältst du eine Kopie.

code:
1:
2:
3:
aHundebild.Location.X = irgendwas;


Würde also den X-Wert der Kopie anpassen. Daher der Fehler (könnte ich auch nicht aus der Meldung lesen)...

Dein Code ist aber falsch, da du Versuchst Location mit nur dem Wert X zu überschreiben. Benötigt wird aber der gesamte Punkt.

code:
1:
2:
3:
4:
aPosition.X += aDistanz;
aHundebild.Location = aPosition;


Du holst Dir also mit der Eigenschaft eine Kopie des Punktes Location, passt diese Kopie an und weist Sie wieder der Location zu. Das ist ein wenig unintuitiv. Spätestens wenn Du dich in C mit structs und dynamischer Programmierung auseinander setzt, könnte das Konzept etwas klarer werden.

Wenn es dich ganz brennend interessiert, würde ich mal versuchen dir zu erklären, wie das zusammenhängt.

VG,

Karlito
 
Auf diesen Beitrag antworten »
InformaTiger

Danke, ich hatte leider in den letzten Tagen nicht viel Zeit mir das Problem nochmals anzuschauen. Ich werde mir das Programm so schnell wie möglich nochmals anschauen und wenn es Probleme gibt werde ich mich melden.

Zu den Strukturen: Ich wäre gern dazu bereit Sie zu erlernen. smile

Lg
InformaTiger
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »