Hello together
I'm a Newbie on C# and have a question about Forms.
I have developed a littel App wich is simulating (with the help of multiple panels) a crane. Now I have the problem, if i move the crane (pressing the approriate buttons see code below) the crane will leave the form and it's gone.
How can I avoid this, which means how i can limit the Form, so the crane won't leave the Form if it reaches for example the left corner etc.
Thank you for your help
I'm a Newbie on C# and have a question about Forms.
I have developed a littel App wich is simulating (with the help of multiple panels) a crane. Now I have the problem, if i move the crane (pressing the approriate buttons see code below) the crane will leave the form and it's gone.
How can I avoid this, which means how i can limit the Form, so the crane won't leave the Form if it reaches for example the left corner etc.
Thank you for your help
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading; // benötigt für die Pausefunktion siehe weiter unten
using System.Threading.Tasks;
using System.Windows.Forms;
/* virtueller Kran realisiert mit Hilfe von verschiebbaren Panels */
/* (C) 2018 by E.Altherr
/* Version 2: fragt nun den Benutzer ob er das Programm wirklich beenden will */
/* Version 2.1: hat nun ein schickes pebe Logo eingebaut das mit einem Button getimt nach rechts bewegt werden kann */
/* Version 2.11: nun kann das Logo, sprich die "Last" auch nach links bewegt werden ebenfalls getimt */
/* Version 2.12: durch einen Klick auf den Button Last abwerfen kann diese auch ggf. abgeworfen werden */
/* Version 2.13: nun kann die Last auch wieder an den Haken angehängt werden */
/* Version 2.14: auch können nun die Links/Rechts Bewegungen der Last gestoppt werden bei Bedarf */
/* Version 2.15: keine Aenderungen */
/* Version 2.16: Timer für "Lastabwurf" langsamer eingestellt,d.h. einen höheren Intervall gesetzt */
/* Version 2.17: kleines Fenster implementiert dass ne kurze Startmeldung anzeigt und dann selber wieder verschwindet (realisiert mit einem 2. Form)*/
/*geplant:Abwurf der Last und Bewegung des Krans nur innerhalb des Forms momentan geht beides nicht */
namespace Kran
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/* die Panels, je nachdem welcher Button angeklickt wird, entsprechend bewegen */
private void Hackenaus_Click(object sender, EventArgs e)
{
panel4.Height = panel4.Height + 10;
}
private void panel4_Paint(object sender, PaintEventArgs e)
{
}
private void Hackenein_Click(object sender, EventArgs e)
{
panel4.Height = panel4.Height - 10;
}
private void panel3_Paint(object sender, PaintEventArgs e)
{
}
private void Auslegerein_Click(object sender, EventArgs e)
{
panel3.Width = panel3.Width - 10;
panel3.Location = new Point(panel3.Location.X + 10, panel3.Location.Y);
panel4.Location = new Point(panel4.Location.X + 10, panel4.Location.Y);
}
private void Auslegeraus_Click(object sender, EventArgs e)
{
panel3.Width = panel3.Width + 10;
panel3.Location = new Point(panel3.Location.X - 10, panel3.Location.Y);
panel4.Location = new Point(panel4.Location.X - 10, panel4.Location.Y);
}
private void Kranrechts_Click(object sender, EventArgs e)
{
panel1.Location = new Point(panel1.Location.X + 10, panel1.Location.Y);
panel2.Location = new Point(panel2.Location.X + 10, panel2.Location.Y);
panel3.Location = new Point(panel3.Location.X + 10, panel3.Location.Y);
panel4.Location = new Point(panel4.Location.X + 10, panel4.Location.Y);
}
private void Kranlinks_Click(object sender, EventArgs e)
{
panel1.Location = new Point(panel1.Location.X - 10, panel1.Location.Y);
panel2.Location = new Point(panel2.Location.X - 10, panel2.Location.Y);
panel3.Location = new Point(panel3.Location.X - 10, panel3.Location.Y);
panel4.Location = new Point(panel4.Location.X - 10, panel4.Location.Y);
}
private void Kranein_Click(object sender, EventArgs e)
{
panel2.Height = panel2.Height - 10;
panel2.Location = new Point(panel2.Location.X, panel2.Location.Y + 10);
panel3.Location = new Point(panel3.Location.X, panel3.Location.Y + 10);
panel4.Location = new Point(panel4.Location.X, panel4.Location.Y + 10);
}
private void Kranaus_Click(object sender, EventArgs e)
{
panel2.Height = panel2.Height + 10;
panel2.Location = new Point(panel2.Location.X, panel2.Location.Y - 10);
panel4.Location = new Point(panel4.Location.X, panel4.Location.Y - 10);
panel3.Location = new Point(panel3.Location.X, panel3.Location.Y - 10);
}
private void button1_Click(object sender, EventArgs e)
{
/* Dialogbox beim Beenden anzeigen */
/* dann mit einer If Schleife den Status abfragen und je nach Auswahl reagieren */
DialogResult result = MessageBox.Show("Möchten Sie wirklich beenden?", "Beenden?",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
// bei Auswahl Ja = Programm schliessen
Close();
}
else if (result == DialogResult.No)
{
//code for No
// Ansonsten nix tun und das Programm normal weiterlaufen lassen
}
else if (result == DialogResult.Cancel)
{
//dito beim Drücken des Cancel Buttons
}
}
private void Form1_Load(object sender, EventArgs e)
/* hier können allfällige Startmeldungen eingeblendet werden bevor das eigentliche Windows Forms basierte Programm startet */
/* um eine buttonlose Startmeldung anzzuzeigen wurde ein 2. Form kreiert */
{
Form2 frm = new Form2(); // Objekt von Form2 erstellen:
frm.Show(); // Form2 anzeigen, da die Messagenbox diese Methode nicht unterstützt,d.h. es gibt keine buttonlose Messagebox
Thread.Sleep(1000); // und ne kurze Pause einlegen und dann
frm.Hide(); // gleich wieder schliessen und dann das Programm starten
}
private void panel5_Paint(object sender, PaintEventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
// zuguter Letzt das Ganze noch mit dem pebe Logo machen dass durch den Timer automatisch nach rechts bewegt wird.
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
panel5.Location = new Point(panel5.Location.X + 5, panel5.Location.Y); /* Panel wandert langsam nach rechts bis der User den Stop Button drückt */
}
private void button3_Click(object sender, EventArgs e)
{
timer3.Enabled = false; /* Stoppt die Timer */
}
private void button4_Click(object sender, EventArgs e)
{
timer2.Enabled = true;
}
private void timer2_Tick(object sender, EventArgs e)
{
panel5.Location = new Point(panel5.Location.X - 5, panel5.Location.Y); /* Panel wandert langsam nach links bis der User den Stop Button drückt */
}
private void button5_Click(object sender, EventArgs e)
{
timer3.Enabled = true; /* Timer für schnelle Bewegung setzen */
//timer3.Enabled = false; /* damit das "Panel" nicht einfach so verschwindet wird nach der Bewegung der Timer sofort gestoppt */
// funktioniert noch nicht in Planung
}
private void timer3_Tick(object sender, EventArgs e)
{
panel5.Location = new Point(panel5.Location.X, panel5.Location.Y + 5); /* durch den Timer3 wird das Logo Panel bzw. die Last abgeworfen Merke: je höher der Intervall je langsamer läuft der Timer ab */
}
private void button3_Click_1(object sender, EventArgs e)
{
timer4.Enabled = true; /* Timer für langsame Bewegung setzen, je höher der Intervall je langsamer läuft der Timer */
}
private void timer4_Tick(object sender, EventArgs e)
{
panel5.Location = new Point(panel5.Location.X, panel5.Location.Y - 5); /* die Last wieder zum Abwurfhaken bewegen */
}
private void button6_Click(object sender, EventArgs e)
{
timer4.Enabled = false; /* wenn die Last beim Haken angekommen ist, das Anhängen stoppen */
}
private void button7_Click(object sender, EventArgs e)
{
/* Lastbewegung nach links oder rechts stoppen */
timer1.Enabled = false; // Durch Klicken auf den Button werden der timer1+2 gestoppt */
timer2.Enabled = false;
}
private void panel2_Paint(object sender, PaintEventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
}
}