Hallo
Ich bin verzweilfelt. Ich muss für die uni ein so ein Blödes Mazegame schreiben. Da hab ich meine nette Class library, die eigentlich hervorragend funktioniert. Jetzt habe ich eine Windows appliction geshrieben, welche auf einem einfachen windows form in der OnPaint methode die maze mit linien auf das Form zeichnet. das funktioniert soweit auch wenn ich das Programm aber sarte sieht man kurz das Form und dann kommt sofrt einen unbahandelte Exception des Typs InvalidCastException und VS zeigt mir auf die Geschwungene klammer nach Application.Run(xx); also ans ende der main funktion. Und ich habe keine ahnung woran das liegt.
Habt ihr irgent eine idee?
übrigens ich caste nix im ganzen programm.
Edit: ich glaube es liegt daran dass ich irgentwo aus der Form rauszeichne, aber das dürfte keine probleme machen, normal.
Wenn die Exception dein Programm nicht zum Absturz bringt, dann fang sie lieber mit catch ab und verarbeite sie nicht. Ich weiß, dass es unsauber ist und keine richtige Lösung ist. Andernfalls such einfach mal mit dem Debugger.
Sie bringt das Programm aber zum absturz. Also Abfangen bringt mich nicht weiter.
Dann würde ich dir mal raten ein bisschen Code zu posten, damit man dein Problem überhaupt lösen kann ohne etwas zu Vermuten.
Gibt es noch genauere Infos zu der Exception?
Mach mal ein Breakpoint auf den Konstruktor der Form und steppe durch.
Das hilft bestimmt!
Wahrscheinlich ist der Fehler nämlich in dem new XYXForm() angesiedelt.
Ich hoffe, dass das hilft.
Grüße, Christoph
Ok jetzt ist etwas komisches passiert, ich habe eine if mit einem fehehl dahinter, das habe ich jetzt in {} geklammert. jetzt läufts ohne fehler o.O
das war alles in der onpaint methode. so ein blödsinn, ich glaube die runteime wei selbs nicht was sie will.
Die weiß was sie will 😉 Schreib mal nen Stück Code und wir können dir auch sagen wo der Fehler lag.
Baka wa shinanakya naoranai.
Mein XING Profil.
in diesem Stück war der fehler:
Ausschnitt aus OnPaint(PaintEventArgs e)
float xfrak= this.ClientRectangle.Width/myMaze.X;
float yfrak= this.ClientRectangle.Height/myMaze.Y;
for(int j=0;j<myMaze.Y;j++)
{
for (int i=0;i<myMaze.X;i++)
{
if(myMaze.Rooms[j,i].GetSide(TheMaze.Direction.East) is TheMaze.Wall)
e.Graphics.DrawLine(new Pen( new SolidBrush(Color.Black), 2),(i+1)*xfrak,j*yfrak,(i+1)*xfrak,(j+1)*yfrak);
else if(!((TheMaze.Door)myMaze.Rooms[j,i].GetSide(TheMaze.Direction.East)).IsOpen)
e.Graphics.DrawLine(new Pen( new SolidBrush(Color.LightGoldenrodYellow), 1),(i+1)*xfrak,j*yfrak,(i+1)*xfrak,(j+1)*yfrak);
if(myMaze.Rooms[j,i].GetSide(TheMaze.Direction.South)is TheMaze.Wall)
e.Graphics.DrawLine(new Pen( new SolidBrush(Color.Black), 2),i*xfrak,(j+1)*yfrak,(i+1)*xfrak,(j+1)*yfrak);
else if(!((TheMaze.Door)myMaze.Rooms[j,i].GetSide(TheMaze.Direction.South)).IsOpen)
e.Graphics.DrawLine(new Pen( new SolidBrush(Color.LightGoldenrodYellow), 1),i*xfrak,(j+1)*yfrak,(i+1)*xfrak,(j+1)*yfrak);
}
};
Also ich hab die klammern bie der If wieder wegemacht, und alles läuft.
Ich würde dir empfehlen auch, wenns nicht nötig ist, immer die Klammen zu benutzen bei solch einzeiligen Code. Ist einfach besser lesbarer und nicht so fehlerträchtig.
Baka wa shinanakya naoranai.
Mein XING Profil.
normal klammere ich alles und jeden, aber in diesem fall schauts ohne klammern erträglicher aus. sonst ist man irentwann aus dem rechten bildschirmrand verschwunden und sieht nur noch
{
{
{
{
usw.
Hallo True,
ich klammere auch immer alles, mit einer Ausnahme: Wenn auf ein else direkt ein if folgt.
Mit dieser Vorgehensweise würde auch dein Code nur max eine Ebene eingerückt und wäre trotzdem besser lesbar.
if (...) {
//...
} else if (...) {
//...
} else {
//...
}
herbivore
Hier ist dein Cast:
if(!(**(TheMaze.Door)**myMaze.Rooms[j,i].GetSide(TheMaze.Direction.East)).IsOpen)...
Davor kommt noch eine "is"-Abfrage, die wohl sicherstellen soll, dass der Cast ok ist...