11 public partial class Form1 : Form
13 private Button btnSkalarfeld;
14 private Button btnVektorfeld;
15 private CheckBox cbIs3D;
19 InitializeComponent();
20 InitializeStartScreen();
23 private void InitializeStartScreen()
25 this.Controls.Clear();
26 this.BackColor = Color.FromArgb(33, 33, 33);
27 this.ForeColor = Color.White;
28 this.Text =
"Vektorkalkül Visualisierung";
29 this.Size =
new Size(600, 400);
31 btnSkalarfeld =
new Button();
32 btnSkalarfeld.Text =
"Skalarfeld";
33 btnSkalarfeld.Size =
new Size(120, 40);
34 btnSkalarfeld.Location =
new Point(100, 100);
35 btnSkalarfeld.Click += BtnSkalarfeld_Click;
36 this.Controls.Add(btnSkalarfeld);
38 btnVektorfeld =
new Button();
39 btnVektorfeld.Text =
"Vektorfeld";
40 btnVektorfeld.Size =
new Size(120, 40);
41 btnVektorfeld.Location =
new Point(100, 160);
42 btnVektorfeld.Click += BtnVektorfeld_Click;
43 this.Controls.Add(btnVektorfeld);
45 cbIs3D =
new CheckBox();
46 cbIs3D.Text =
"Ist die Funktion 3D?";
47 cbIs3D.ForeColor = Color.White;
48 cbIs3D.BackColor = Color.FromArgb(33, 33, 33);
49 cbIs3D.Location =
new Point(250, 130);
50 cbIs3D.AutoSize =
true;
51 this.Controls.Add(cbIs3D);
53 private string NormalizeExpression(
string expr)
56 expr = Regex.Replace(expr,
@"(\b[a-zA-Z_]\w*)\^(\d+)",
"Pow($1,$2)");
58 expr = Regex.Replace(expr,
@"\(([^()]+)\)\^(\d+)",
"Pow(($1),$2)");
63 private void BtnSkalarfeld_Click(
object sender, EventArgs e)
67 bool is3D = cbIs3D.Checked;
69 this.Controls.Clear();
70 this.BackColor = Color.FromArgb(33, 33, 33);
71 this.ForeColor = Color.White;
73 Label lblFunc =
new Label();
74 lblFunc.Text = is3D ?
"Skalarfeld f(x, y, z):" :
"Skalarfeld f(x, y):";
75 lblFunc.Location =
new Point(30, 30);
76 lblFunc.AutoSize =
true;
77 this.Controls.Add(lblFunc);
79 TextBox txtFunc =
new TextBox();
80 txtFunc.Location =
new Point(170, 25);
82 this.Controls.Add(txtFunc);
84 Label lblPoint =
new Label();
85 lblPoint.Text = is3D ?
"Punkt (x, y, z):" :
"Punkt (x, y):";
86 lblPoint.Location =
new Point(30, 70);
87 lblPoint.AutoSize =
true;
88 this.Controls.Add(lblPoint);
90 TextBox txtX =
new TextBox();
91 txtX.Location =
new Point(170, 65);
93 this.Controls.Add(txtX);
95 TextBox txtY =
new TextBox();
96 txtY.Location =
new Point(240, 65);
98 this.Controls.Add(txtY);
103 txtZ =
new TextBox();
104 txtZ.Location =
new Point(310, 65);
106 this.Controls.Add(txtZ);
109 CheckBox cbGradient =
new CheckBox();
110 cbGradient.Text =
"Gradient anzeigen (Falls valide Punkte gegeben sind)";
111 cbGradient.ForeColor = Color.White;
112 cbGradient.BackColor = Color.FromArgb(33, 33, 33);
113 cbGradient.Location =
new Point(30, 110);
114 cbGradient.AutoSize =
true;
115 this.Controls.Add(cbGradient);
116 Button btnVisualisieren =
new Button();
117 btnVisualisieren.Text =
"Visualisieren";
118 btnVisualisieren.Location =
new Point(30, 140);
119 btnVisualisieren.Size =
new Size(120, 30);
120 btnVisualisieren.Click += (s, args) =>
125 string expr = txtFunc.Text.Trim();
126 if (
string.IsNullOrWhiteSpace(expr))
128 MessageBox.Show(
"Bitte eine Funktion eingeben.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
135 expr = NormalizeExpression(expr);
136 var testExpr =
new Expression(expr);
138 testExpr.Parameters[
"x"] = 1.0;
139 testExpr.Parameters[
"y"] = 1.0;
141 testExpr.Parameters[
"z"] = 1.0;
143 var result = testExpr.Evaluate();
144 if (result ==
null ||
double.IsNaN(Convert.ToDouble(result)))
145 throw new Exception(
"Ergebnis ist ungültig");
149 MessageBox.Show(
"Die Funktion ist ungültig oder nicht auswertbar.\nDetails: " + ex.Message,
150 "Parserfehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
155 double? px =
null, py =
null, pz =
null;
156 double xVal = 0, yVal = 0;
157 bool hasX = !
string.IsNullOrWhiteSpace(txtX.Text);
158 bool hasY = !
string.IsNullOrWhiteSpace(txtY.Text);
160 if ((hasX && !hasY) || (!hasX && hasY))
162 MessageBox.Show(
"Bitte entweder beide Koordinaten x und y angeben oder keine.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
166 if (hasX && !
double.TryParse(txtX.Text, out xVal))
168 MessageBox.Show(
"x ist keine gültige Zahl.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
172 if (hasY && !
double.TryParse(txtY.Text, out yVal))
174 MessageBox.Show(
"y ist keine gültige Zahl.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
181 if (is3D && txtZ !=
null && !
string.IsNullOrWhiteSpace(txtZ.Text))
183 if (!
double.TryParse(txtZ.Text, out
double zVal))
185 MessageBox.Show(
"z ist keine gültige Zahl.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
194 double xMin = -5, xMax = 5;
195 double yMin = -5, yMax = 5;
196 double stepX = (xMax - xMin) / size;
197 double stepY = (yMax - yMin) / size;
199 double[,] values =
new double[size, size];
201 for (
int i = 0; i < size; i++)
203 for (
int j = 0; j < size; j++)
205 double x = xMin + i * stepX;
206 double y = yMin + j * stepY;
209 values[size - j - 1,i] = EvaluateScalarField(expr, x, y);
213 values[size - j - 1,i] =
double.NaN;
218 string? gradientText =
null;
219 if (cbGradient.Checked && px.HasValue && py.HasValue)
221 Func<double, double, double> funcDelegate = (x, y) => EvaluateScalarField(expr, x, y);
222 var grad = FieldOperations.ComputeGradient2D(funcDelegate, px.Value, py.Value);
223 gradientText = $
"(∂f/∂x, ∂f/∂y): \n ({Math.Round(grad[0], 4)}, {Math.Round(grad[1], 4)})";
226 var plotWindow =
new PlotForm(values, xMin, xMax, yMin, yMax, gradientText, cbGradient.Checked);
227 plotWindow.StartPosition = FormStartPosition.CenterScreen;
234 expr = NormalizeExpression(expr);
235 var testExpr =
new Expression(expr);
236 testExpr.Parameters[
"x"] = 1.0;
237 testExpr.Parameters[
"y"] = 1.0;
238 testExpr.Parameters[
"z"] = 1.0;
245 MessageBox.Show(
"Funktion ungültig.",
"Fehler");
248 Func<double, double, double, double> func3D = (x, y, z) =>
249 EvaluateScalarField(expr, x, y, z);
252 double? ppx =
null, ppy =
null, ppz =
null;
254 bool hasZ = !
string.IsNullOrWhiteSpace(txtZ.Text);
257 if ((hasX || hasY || hasZ) && !(hasX && hasY && hasZ))
259 MessageBox.Show(
"Bitte entweder alle drei Koordinaten (x, y, z) angeben oder keine.",
260 "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
265 if (hasX && hasY && hasZ)
268 double.TryParse(txtX.Text, NumberStyles.Float, CultureInfo.InvariantCulture, out xVal) &&
269 double.TryParse(txtY.Text, NumberStyles.Float, CultureInfo.InvariantCulture, out yVal) &&
270 double.TryParse(txtZ.Text, NumberStyles.Float, CultureInfo.InvariantCulture, out
double zVal))
278 MessageBox.Show(
"Bitte gültige Zahlen für x, y und z eingeben.",
279 "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
286 double zFixed = ppz ?? 0;
287 string? gradientText =
null;
289 if (cbGradient.Checked && ppx.HasValue && ppy.HasValue && ppz.HasValue)
291 var grad = FieldOperations.ComputeGradient3D(func3D, ppx.Value, ppy.Value, ppz.Value);
293 $
"(∂f/∂x, ∂f/∂y, ∂f/∂z): \n " +
294 $
"({Math.Round(grad[0], 4)}, {Math.Round(grad[1], 4)}, {Math.Round(grad[2], 4)})";
298 var plotWindow =
new PlotForm3D(func3D, zFixed, 80, gradientText);
299 plotWindow.StartPosition = FormStartPosition.CenterScreen;
310 MessageBox.Show(
"Fehler bei der Berechnung:\n" + ex.Message,
311 "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
314 this.Controls.Add(btnVisualisieren);
315 this.Controls.Add(CreateBackButton());
319 private void BtnVektorfeld_Click(
object sender, EventArgs e)
321 bool is3D = cbIs3D.Checked;
323 this.Controls.Clear();
324 this.BackColor = Color.FromArgb(33, 33, 33);
325 this.ForeColor = Color.White;
329 Label lblFx =
new Label { Text =
"Fx(x, y):", Location =
new Point(30, 30), AutoSize =
true };
330 TextBox txtFx =
new TextBox { Location =
new Point(100, 25), Width = 300 };
331 this.Controls.Add(lblFx);
332 this.Controls.Add(txtFx);
334 Label lblFy =
new Label { Text =
"Fy(x, y):", Location =
new Point(30, 70), AutoSize =
true };
335 TextBox txtFy =
new TextBox { Location =
new Point(100, 65), Width = 300 };
336 this.Controls.Add(lblFy);
337 this.Controls.Add(txtFy);
339 Label lblPoint =
new Label { Text =
"Punkt (x, y):", Location =
new Point(30, 110), AutoSize =
true };
340 TextBox txtX =
new TextBox { Location =
new Point(130, 105), Width = 60 };
341 TextBox txtY =
new TextBox { Location =
new Point(200, 105), Width = 60 };
342 this.Controls.Add(lblPoint);
343 this.Controls.Add(txtX);
344 this.Controls.Add(txtY);
346 CheckBox cbDivergenz =
new CheckBox { Text =
"Divergenz anzeigen", Location =
new Point(30, 150), AutoSize =
true, ForeColor = Color.White, BackColor = Color.FromArgb(33, 33, 33) };
347 CheckBox cbRotation =
new CheckBox { Text =
"Rotation anzeigen", Location =
new Point(30, 180), AutoSize =
true, ForeColor = Color.White, BackColor = Color.FromArgb(33, 33, 33) };
348 this.Controls.Add(cbDivergenz);
349 this.Controls.Add(cbRotation);
351 Button btnVisualisieren =
new Button { Text =
"Visualisieren", Location =
new Point(30, 220), AutoSize =
true, BackColor = Color.FromArgb(33, 33, 33), ForeColor = Color.White };
352 btnVisualisieren.Size =
new Size(120, 30);
353 this.Controls.Add(btnVisualisieren);
354 this.Controls.Add(CreateBackButton());
356 btnVisualisieren.Click += (s, args) =>
360 string fxExpr = NormalizeExpression(txtFx.Text.Trim());
361 string fyExpr = NormalizeExpression(txtFy.Text.Trim());
363 if (
string.IsNullOrWhiteSpace(fxExpr) ||
string.IsNullOrWhiteSpace(fyExpr))
365 MessageBox.Show(
"Bitte sowohl Fx als auch Fy eingeben.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
371 var testFx =
new Expression(fxExpr);
372 var testFy =
new Expression(fyExpr);
373 testFx.Parameters[
"x"] = 1.0;
374 testFx.Parameters[
"y"] = 1.0;
375 testFy.Parameters[
"x"] = 1.0;
376 testFy.Parameters[
"y"] = 1.0;
382 MessageBox.Show(
"Mindestens ein Ausdruck ist ungültig.",
"Parserfehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
386 double? px =
null, py =
null;
387 bool hasX = !
string.IsNullOrWhiteSpace(txtX.Text);
388 bool hasY = !
string.IsNullOrWhiteSpace(txtY.Text);
390 if ((hasX && !hasY) || (!hasX && hasY))
392 MessageBox.Show(
"Bitte entweder beide Koordinaten x und y angeben oder keine.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
396 double xVal = 0, yVal = 0;
397 if (hasX && !
double.TryParse(txtX.Text, out xVal))
399 MessageBox.Show(
"x ist keine gültige Zahl.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
402 if (hasY && !
double.TryParse(txtY.Text, out yVal))
404 MessageBox.Show(
"y ist keine gültige Zahl.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
415 double xMin = -5, xMax = 5;
416 double yMin = -5, yMax = 5;
417 double stepX = (xMax - xMin) / size;
418 double stepY = (yMax - yMin) / size;
420 double[][,] vectorField =
new double[2][,];
421 vectorField[0] =
new double[size, size];
422 vectorField[1] =
new double[size, size];
424 double[,] divergence =
null;
425 double[,] rotation =
null;
427 Func<double, double, double[]> vectorFunc = (x, y) =>
429 double fx = EvaluateScalarField(fxExpr, x, y);
430 double fy = EvaluateScalarField(fyExpr, x, y);
431 return new double[] { fx, fy };
434 if (cbDivergenz.Checked) divergence =
new double[size, size];
435 if (cbRotation.Checked) rotation =
new double[size, size];
437 for (
int i = 0; i < size; i++)
439 for (
int j = 0; j < size; j++)
441 double x = xMin + i * stepX;
442 double y = yMin + j * stepY;
445 var vec = vectorFunc(x, y);
446 vectorField[0][i, j] = vec[0];
447 vectorField[1][i, j] = vec[1];
449 if (cbDivergenz.Checked)
450 divergence[i, j] = FieldOperations.ComputeDivergence2D(vectorFunc, x, y);
451 if (cbRotation.Checked)
452 rotation[i, j] = FieldOperations.ComputeCurl2D(vectorFunc, x, y);
456 vectorField[0][i, j] =
double.NaN;
457 vectorField[1][i, j] =
double.NaN;
458 if (divergence !=
null) divergence[i, j] =
double.NaN;
459 if (rotation !=
null) rotation[i, j] =
double.NaN;
464 var plotWindow =
new VektorPlotForm2D(vectorField, xMin, xMax, yMin, yMax, divergence, rotation, px, py);
465 plotWindow.StartPosition = FormStartPosition.CenterScreen;
470 MessageBox.Show(
"Fehler bei der Berechnung:\n" + ex.Message,
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
476 InitializeVektorfeld3DGUI();
479 private void InitializeVektorfeld3DGUI()
481 this.Controls.Clear();
482 this.BackColor = Color.FromArgb(33, 33, 33);
483 this.ForeColor = Color.White;
486 Label lblFx =
new Label { Text =
"Fx(x, y, z):", Location =
new Point(30, 30), AutoSize =
true };
487 TextBox txtFx =
new TextBox { Name =
"txtFx3D", Location =
new Point(130, 25), Width = 300 };
488 this.Controls.Add(lblFx);
489 this.Controls.Add(txtFx);
492 Label lblFy =
new Label { Text =
"Fy(x, y, z):", Location =
new Point(30, 70), AutoSize =
true };
493 TextBox txtFy =
new TextBox { Name =
"txtFy3D", Location =
new Point(130, 65), Width = 300 };
494 this.Controls.Add(lblFy);
495 this.Controls.Add(txtFy);
498 Label lblFz =
new Label { Text =
"Fz(x, y, z):", Location =
new Point(30, 110), AutoSize =
true };
499 TextBox txtFz =
new TextBox { Name =
"txtFz3D", Location =
new Point(130, 105), Width = 300 };
500 this.Controls.Add(lblFz);
501 this.Controls.Add(txtFz);
504 Label lblPoint =
new Label { Text =
"Punkt (x, y, z):", Location =
new Point(30, 150), AutoSize =
true };
505 TextBox txtX =
new TextBox { Name =
"txtX3D", Location =
new Point(130, 145), Width = 60 };
506 TextBox txtY =
new TextBox { Name =
"txtY3D", Location =
new Point(200, 145), Width = 60 };
507 TextBox txtZ =
new TextBox { Name =
"txtZ3D", Location =
new Point(270, 145), Width = 60 };
508 this.Controls.Add(lblPoint);
509 this.Controls.Add(txtX);
510 this.Controls.Add(txtY);
511 this.Controls.Add(txtZ);
514 CheckBox cbDivergenz =
new CheckBox
516 Text =
"Divergenz anzeigen",
517 Name =
"cbDivergenz3D",
518 Location =
new Point(30, 190),
520 ForeColor = Color.White,
521 BackColor = Color.FromArgb(33, 33, 33)
523 this.Controls.Add(cbDivergenz);
526 CheckBox cbRotation =
new CheckBox
528 Text =
"Rotation anzeigen",
529 Name =
"cbRotation3D",
530 Location =
new Point(30, 220),
532 ForeColor = Color.White,
533 BackColor = Color.FromArgb(33, 33, 33)
535 this.Controls.Add(cbRotation);
538 Button btnVisualisieren =
new Button
540 Text =
"Visualisieren",
541 Location =
new Point(30, 260),
542 Size =
new Size(120, 30),
543 BackColor = Color.FromArgb(33, 33, 33),
544 ForeColor = Color.White
546 this.Controls.Add(btnVisualisieren);
547 this.Controls.Add(CreateBackButton());
549 btnVisualisieren.Click += (s, e) =>
554 string fxExpr = NormalizeExpression(((TextBox)this.Controls[
"txtFx3D"]).Text.Trim());
555 string fyExpr = NormalizeExpression(((TextBox)this.Controls[
"txtFy3D"]).Text.Trim());
556 string fzExpr = NormalizeExpression(((TextBox)this.Controls[
"txtFz3D"]).Text.Trim());
558 string xText = ((TextBox)this.Controls[
"txtX3D"]).Text.Trim();
559 string yText = ((TextBox)this.Controls[
"txtY3D"]).Text.Trim();
560 string zText = ((TextBox)this.Controls[
"txtZ3D"]).Text.Trim();
562 bool hasX = !
string.IsNullOrWhiteSpace(xText);
563 bool hasY = !
string.IsNullOrWhiteSpace(yText);
564 bool hasZ = !
string.IsNullOrWhiteSpace(zText);
566 bool showDiv = ((CheckBox)this.Controls[
"cbDivergenz3D"]).Checked;
567 bool showRot = ((CheckBox)this.Controls[
"cbRotation3D"]).Checked;
570 if ((hasX || hasY || hasZ) && !(hasX && hasY && hasZ))
572 MessageBox.Show(
"Bitte entweder alle drei Koordinaten x, y, z angeben oder keine.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
579 var t1 =
new Expression(fxExpr);
580 var t2 =
new Expression(fyExpr);
581 var t3 =
new Expression(fzExpr);
582 t1.Parameters[
"x"] = 1.0;
583 t1.Parameters[
"y"] = 1.0;
584 t1.Parameters[
"z"] = 1.0;
585 t2.Parameters[
"x"] = 1.0;
586 t2.Parameters[
"y"] = 1.0;
587 t2.Parameters[
"z"] = 1.0;
588 t3.Parameters[
"x"] = 1.0;
589 t3.Parameters[
"y"] = 1.0;
590 t3.Parameters[
"z"] = 1.0;
591 t1.Evaluate(); t2.Evaluate(); t3.Evaluate();
595 MessageBox.Show(
"Mindestens ein Ausdruck ist ungültig.",
"Parserfehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
600 double? px =
null, py =
null, pz =
null;
601 if (hasX && hasY && hasZ)
603 if (
double.TryParse(xText, NumberStyles.Float, CultureInfo.InvariantCulture, out
double xVal) &&
604 double.TryParse(yText, NumberStyles.Float, CultureInfo.InvariantCulture, out
double yVal) &&
605 double.TryParse(zText, NumberStyles.Float, CultureInfo.InvariantCulture, out
double zVal))
607 px = xVal; py = yVal; pz = zVal;
611 MessageBox.Show(
"Bitte gültige Werte für x, y, z eingeben.",
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
617 Func<double, double, double, double[]> vectorFunc = (x, y, z) =>
621 EvaluateScalarField(fxExpr, x, y, z),
622 EvaluateScalarField(fyExpr, x, y, z),
623 EvaluateScalarField(fzExpr, x, y, z)
629 double min = -5, max = 5;
630 double step = (max - min) / size;
632 var vectors =
new double[3][,,];
633 vectors[0] =
new double[size, size, size];
634 vectors[1] =
new double[size, size, size];
635 vectors[2] =
new double[size, size, size];
637 double[,,] divergence = showDiv ?
new double[size, size, size] :
null;
638 double[][,,] curl = showRot ?
new double[3][,,] :
null;
641 curl[0] =
new double[size, size, size];
642 curl[1] =
new double[size, size, size];
643 curl[2] =
new double[size, size, size];
646 for (
int i = 0; i < size; i++)
648 for (
int j = 0; j < size; j++)
650 for (
int k = 0; k < size; k++)
652 double x = min + i * step;
653 double y = min + j * step;
654 double z = min + k * step;
657 var vec = vectorFunc(x, y, z);
658 vectors[0][i, j, k] = vec[0];
659 vectors[1][i, j, k] = vec[1];
660 vectors[2][i, j, k] = vec[2];
663 divergence[i, j, k] = FieldOperations.ComputeDivergence3D(vectorFunc, x, y, z);
667 var rot = FieldOperations.ComputeCurl3D(vectorFunc, x, y, z);
668 curl[0][i, j, k] = rot[0];
669 curl[1][i, j, k] = rot[1];
670 curl[2][i, j, k] = rot[2];
675 vectors[0][i, j, k] = vectors[1][i, j, k] = vectors[2][i, j, k] =
double.NaN;
676 if (showDiv) divergence[i, j, k] =
double.NaN;
677 if (showRot) { curl[0][i, j, k] = curl[1][i, j, k] = curl[2][i, j, k] =
double.NaN; }
684 bool showInfoPanel = (showDiv || showRot) && px.HasValue && py.HasValue && pz.HasValue;
686 var plotWindow =
new VektorPlotForm3D(
689 showInfoPanel ? divergence :
null,
690 showInfoPanel ? curl :
null,
693 plotWindow.StartPosition = FormStartPosition.CenterScreen;
700 MessageBox.Show(
"Fehler:\n" + ex.Message,
"Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
709 private double EvaluateScalarField(
string expressionText,
double x,
double y,
double? z =
null)
711 var expr =
new Expression(expressionText);
712 expr.Parameters[
"x"] = x;
713 expr.Parameters[
"y"] = y;
715 expr.Parameters[
"z"] = z.Value;
717 var result = expr.Evaluate();
718 return Convert.ToDouble(result);
720 private double Evaluate(Expression expr,
double x,
double y)
722 expr.Parameters[
"x"] = x;
723 expr.Parameters[
"y"] = y;
724 return Convert.ToDouble(expr.Evaluate());
727 private Button CreateBackButton()
729 Button btnBack =
new Button();
730 btnBack.Text =
"Zurück";
731 btnBack.Size =
new Size(100, 30);
732 btnBack.BackColor = Color.FromArgb(55, 55, 55);
733 btnBack.ForeColor = Color.White;
734 btnBack.Location =
new Point(this.ClientSize.Width - 120,
this.ClientSize.Height - 50);
735 btnBack.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
736 btnBack.Click += (s, e) => InitializeStartScreen();
740 private void Form1_Load(
object sender, EventArgs e)