Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Informatik in der Schule (http://www.informatikerboard.de/board/board.php?boardid=21)
--- C# Methoden Fehler GUI (http://www.informatikerboard.de/board/thread.php?threadid=1402)


Geschrieben von InformaTiger am 23.02.2013 um 22:51:

  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



Geschrieben von Karlito am 24.02.2013 um 00:52:

 

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



Geschrieben von InformaTiger am 24.02.2013 um 20:21:

 

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



Geschrieben von Karlito am 25.02.2013 um 02:32:

 

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



Geschrieben von InformaTiger am 26.02.2013 um 14:00:

 

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


Forensoftware: Burning Board, entwickelt von WoltLab GmbH