Lektion 19: lösningsförslag

  1. // 1
  2. class ConsoleInput
  3. {
  4. public static int ReadInt()
  5. {
  6. do
  7. {
  8. Console.Write("Mata in ett heltal: ");
  9. string s = Console.ReadLine();
  10. try
  11. {
  12. int value = int.Parse(s);
  13. return value;
  14. }
  15. catch
  16. {
  17. Console.WriteLine(s + " är inte ett giltigt heltal");
  18. }
  19. } while (true);
  20. }
  21. public static double ReadDouble()
  22. {
  23. do
  24. {
  25. Console.Write("Mata in ett decimaltal: ");
  26. string s = Console.ReadLine();
  27. try
  28. {
  29. double value = double.Parse(s);
  30. return value;
  31. }
  32. catch
  33. {
  34. Console.WriteLine(s + " är inte ett giltigt decimaltal");
  35. }
  36. } while (true);
  37. }
  38. public static bool ReadBool()
  39. {
  40. do
  41. {
  42. Console.Write("Mata in ett booleskt värde: ");
  43. string s = Console.ReadLine();
  44. try
  45. {
  46. bool value = bool.Parse(s);
  47. return value;
  48. }
  49. catch
  50. {
  51. Console.WriteLine(s + " är inte ett giltigt booleskt värde");
  52. }
  53. } while (true);
  54. }
  55. public static string ReadString()
  56. {
  57. Console.Write("Mata in en sträng: ");
  58. string s = Console.ReadLine();
  59. return s;
  60. }
  61. }
  62. // 2
  63. // We use overloads to distinguish between flags with/without outer crosses; the second overload is below this one. Other variants are also possible.
  64. private TableLayoutPanel CreateNordicFlag(Color colorBackground, Color colorCross)
  65. {
  66. TableLayoutPanel flag = new TableLayoutPanel
  67. {
  68. RowCount = 3,
  69. ColumnCount = 3,
  70. Dock = DockStyle.Fill
  71. };
  72. Controls.Add(flag);
  73. flag.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30));
  74. flag.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 10));
  75. flag.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 60));
  76. flag.RowStyles.Add(new RowStyle(SizeType.Percent, 45));
  77. flag.RowStyles.Add(new RowStyle(SizeType.Percent, 10));
  78. flag.RowStyles.Add(new RowStyle(SizeType.Percent, 45));
  79. flag.Controls.Add(CreatePanel(colorBackground));
  80. flag.Controls.Add(CreatePanel(colorCross));
  81. flag.Controls.Add(CreatePanel(colorBackground));
  82. flag.Controls.Add(CreatePanel(colorCross));
  83. flag.Controls.Add(CreatePanel(colorCross));
  84. flag.Controls.Add(CreatePanel(colorCross));
  85. flag.Controls.Add(CreatePanel(colorBackground));
  86. flag.Controls.Add(CreatePanel(colorCross));
  87. flag.Controls.Add(CreatePanel(colorBackground));
  88. return flag;
  89. }
  90. private TableLayoutPanel CreateNordicFlag(Color colorBackground, Color colorCrossOuter, Color
  91. colorCrossInner)
  92. {
  93. TableLayoutPanel flag = new TableLayoutPanel
  94. {
  95. RowCount = 5,
  96. ColumnCount = 5,
  97. Dock = DockStyle.Fill
  98. };
  99. Controls.Add(flag);
  100. flag.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30));
  101. flag.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 5));
  102. flag.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 10));
  103. flag.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 5));
  104. flag.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
  105. flag.RowStyles.Add(new RowStyle(SizeType.Percent, 40));
  106. flag.RowStyles.Add(new RowStyle(SizeType.Percent, 5));
  107. flag.RowStyles.Add(new RowStyle(SizeType.Percent, 10));
  108. flag.RowStyles.Add(new RowStyle(SizeType.Percent, 5));
  109. flag.RowStyles.Add(new RowStyle(SizeType.Percent, 40));
  110. flag.Controls.Add(CreatePanel(colorBackground));
  111. flag.Controls.Add(CreatePanel(colorCrossOuter));
  112. flag.Controls.Add(CreatePanel(colorCrossInner));
  113. flag.Controls.Add(CreatePanel(colorCrossOuter));
  114. flag.Controls.Add(CreatePanel(colorBackground));
  115. flag.Controls.Add(CreatePanel(colorCrossOuter));
  116. flag.Controls.Add(CreatePanel(colorCrossOuter));
  117. flag.Controls.Add(CreatePanel(colorCrossInner));
  118. flag.Controls.Add(CreatePanel(colorCrossOuter));
  119. flag.Controls.Add(CreatePanel(colorCrossOuter));
  120. flag.Controls.Add(CreatePanel(colorCrossInner));
  121. flag.Controls.Add(CreatePanel(colorCrossInner));
  122. flag.Controls.Add(CreatePanel(colorCrossInner));
  123. flag.Controls.Add(CreatePanel(colorCrossInner));
  124. flag.Controls.Add(CreatePanel(colorCrossInner));
  125. flag.Controls.Add(CreatePanel(colorCrossOuter));
  126. flag.Controls.Add(CreatePanel(colorCrossOuter));
  127. flag.Controls.Add(CreatePanel(colorCrossInner));
  128. flag.Controls.Add(CreatePanel(colorCrossOuter));
  129. flag.Controls.Add(CreatePanel(colorCrossOuter));
  130. flag.Controls.Add(CreatePanel(colorBackground));
  131. flag.Controls.Add(CreatePanel(colorCrossOuter));
  132. flag.Controls.Add(CreatePanel(colorCrossInner));
  133. flag.Controls.Add(CreatePanel(colorCrossOuter));
  134. flag.Controls.Add(CreatePanel(colorBackground));
  135. return flag;
  136. }
  137. // A helper method to make the code in the other methods more concise.
  138. private Panel CreatePanel(Color color) {
  139. return new Panel
  140. {
  141. BackColor = color,
  142. Dock = DockStyle.Fill,
  143. Margin = new Padding(0)
  144. };
  145. }
  146. // 3
  147. private TableLayoutPanel CreateTextBoxForm(string[] labels)
  148. {
  149. TableLayoutPanel panel = new TableLayoutPanel
  150. {
  151. ColumnCount = 2,
  152. RowCount = labels.Length,
  153. Dock = DockStyle.Fill
  154. };
  155. foreach (string label in labels)
  156. {
  157. panel.Controls.Add(new Label { Text = label });
  158. panel.Controls.Add(new TextBox());
  159. }
  160. return panel;
  161. }