C# Widht - Height Funktion - Element soll panel nicht verlassen

marivuko

Cadet 3rd Year
Registriert
Mai 2013
Beiträge
48
Tag allerseits,

ich möchte gerne, dass meine "box" (picturebox) den vorgegeben Panel nicht verlässt.
meine erste if Funktion sollte eigentlich dafür sein, dass meine box nach links nicht raus kann
und meine zweite if sollte eigentlich dafür sein, dass meine box nach oben nicht raus kann,
aber irgendwie funktionieren beide nicht :(

für jede Hilfe wäre ich dankbar


Code:
  if (box.Right - box.Height > panel.Height)
                {
                    box.Left = panel.Height + box.Height; 
            }

            if (box.Top - box.Width >= panel.Width)
            {
                box.Top =panel.Width + box.Width;      
            }
 
Mhh, wenn ich dich richtig verstehe, müsste folgende Abfrage doch schon ausreichen, oder?

if ((pictureBox1.Left <= 0) || (pictureBox1.Right >= FMain.ActiveForm.Size.Width) || (pictureBox1.Bottom >= FMain.ActiveForm.Size.Height) || (pictureBox1.Top <= 0))
{
MessageBox.Show("Box verlässt die Form");
}

Musste noch auf deine Bezeichner anpassen.

Edit: Anstatt wie ich eine Form, kannst du auch problemlos dein Panel nehmen, funktioniert trotzdem. Es wird auf das verlassen nach oben/unten/recht/links geprüft.
 
Zuletzt bearbeitet:
Du vermischst hier Right mit Height (also Breite mit Höhe)....

Willst du erreichen, dass die Picturebox immer das Panel ausfüllt?
 
ich will das die Box das panel nicht verlässt
Ergänzung ()

@Bagbag, leider nein weil ich nicht will das es in einer MessageBox angezeigt wird, sondern meine Box einfach an dieser Stelle stehen bleibt, zum beispiel habe ich es mit dem Code versucht und meine box geht nach unten nicht raus,
if (player.Top + player.Height >= screen.Height)
{
player.Top = screen.Height - player.Height;
}

genau das gleiche will ich für rechts und oben am panel haben
 
Der Code mit der MessageBox kam nicht von mir ;)
Aber abgesehen davon könntest du das ja einfach ersetzen, das war nur als Beispiel.

Ich denke es macht mehr sinn, wenn du die Layout Optionen von Win Form nutzt.
Du kannst die Picturebox andocken und dann sagen, dass sie sich z.b. automatisch resized, wenn das Panel verkleinert wird etc.

Edit:
Und ließ (& antworte) mal bitte auf meine PN.
 
marivuko schrieb:
ich will das die Box das panel nicht verlässt
Ergänzung ()

@Bagbag, leider nein weil ich nicht will das es in einer MessageBox angezeigt wird, sondern meine Box einfach an dieser Stelle stehen bleibt, zum beispiel habe ich es mit dem Code versucht und meine box geht nach unten nicht raus,
if (player.Top + player.Height >= screen.Height)
{
player.Top = screen.Height - player.Height;
}

genau das gleiche will ich für rechts und oben am panel haben

Genau das macht mein Code ja ;)... den würde ich in eine Funktion ála "IsMoveAllowed" packen, der anstatt der Messagebox ein False zurückgibt und anderenfalls true.
Sobald der Player dann eine Taste drückt, muss zuerst die Funktion aufgerufen werden, und davon abhängig gemacht werden, ob man die Position des Spielers updatet.

Edit: Hier mal ein altes Projekt von mir, ein Bomberman Spiel wie aus alten Zeiten ;) Vllt. kannst du dir ja einige Sachen aus der Player.cs Klasse abschauen ;)
nicopinke.de/RoboBomber_Mono.exe
 
Zuletzt bearbeitet:
Zurück
Oben