コード
C#
1namespace RubikCube 2{ 3 public partial class RubikCubeForm : Form 4 { 5 private SetupForm _setupForm; 6 private Label[] digitLabel; 7 private Button[] moveVerticalUpButton; 8 private Button[] moveVerticalDownButton; 9 private Button[] moveHorizonLeftButton; 10 private Button[] moveHorizonRightButton; 11 private bool IsClickButton = false; 12 private int _rubiksize; 13 private int _digitLabelSize; 14 public RubikCubeForm() 15 { 16 _setupForm = new SetupForm(); 17 _setupForm.ShowDialog(); 18 InitializeComponent(); 19 } 20 21 private void RubikCubeForm_Load(object sender, EventArgs e) 22 { 23 if (!IsClickButton) 24 { 25 _rubiksize = int.Parse(_setupForm._rubikSize); 26 _tempDigitLabel = new string[_rubiksize]; 27 CreateRubikCube(); 28 } 29 } 30 31 32 private void backToSetupbutton_Click(object sender, EventArgs e) 33 { 34 IsClickButton=false; 35 _setupForm.ShowDialog(); 36 } 37 38 private void CreateRubikCube() 39 { 40 int tempCreateRubikCube = _rubiksize / 2; 41 _digitLabelSize = 50; 42 var startDigitLabelX = Width / 2 - (tempCreateRubikCube * _digitLabelSize); 43 var startDigitLabelY = Height / 2 - (tempCreateRubikCube * _digitLabelSize) - 50; 44 digitLabel = new Label[_rubiksize * _rubiksize]; 45 moveVerticalUpButton = new Button[_rubiksize]; 46 moveVerticalDownButton = new Button[_rubiksize]; 47 moveHorizonLeftButton = new Button[_rubiksize]; 48 moveHorizonRightButton = new Button[_rubiksize]; 49 SuspendLayout(); 50 for (var i = 0; i < _rubiksize; i++) 51 { 52 for (var j = 0; j < _rubiksize; j++) 53 { 54 55 //数字配置 56 digitLabel[j + _rubiksize * i] = new Label(); 57 digitLabel[j + _rubiksize * i].Text = (1 + j + _rubiksize * i).ToString(); 58 digitLabel[j + _rubiksize * i].Location = new Point(startDigitLabelX + j * _digitLabelSize, 59 startDigitLabelY + i * _digitLabelSize); 60 digitLabel[j + _rubiksize * i].Size = new Size(_digitLabelSize, _digitLabelSize); 61 digitLabel[j + _rubiksize * i].TextAlign = ContentAlignment.MiddleCenter; 62 digitLabel[j + _rubiksize * i].Font = new Font("MS UI Gothic", 18, FontStyle.Bold); 63 Controls.Add(digitLabel[j + _rubiksize * i]); 64 65 } 66 //ボタン配置 67 //上 68 moveVerticalUpButton[i] = new Button(); 69 moveVerticalUpButton[i].Text = "↓"; 70 moveVerticalUpButton[i].Name = i.ToString(); 71 moveVerticalUpButton[i].Location = 72 new Point(startDigitLabelX + i * _digitLabelSize, 73 startDigitLabelY - _digitLabelSize); 74 moveVerticalUpButton[i].Size = new Size(_digitLabelSize, _digitLabelSize); 75 moveVerticalUpButton[i].TextAlign = ContentAlignment.MiddleCenter; 76 moveVerticalUpButton[i].Font = new Font("MS UI Gothic", 18, FontStyle.Regular); 77 moveVerticalUpButton[i].Click += new EventHandler(MoveUp_Click); 78 //下 79 moveVerticalDownButton[i] = new Button(); 80 moveVerticalDownButton[i].Text = "↑"; 81 moveVerticalDownButton[i].Name = i.ToString(); 82 moveVerticalDownButton[i].Location = 83 new Point(startDigitLabelX + i * _digitLabelSize, 84 startDigitLabelY + (_rubiksize * _digitLabelSize)); 85 moveVerticalDownButton[i].Size = new Size(_digitLabelSize, _digitLabelSize); 86 moveVerticalDownButton[i].TextAlign = ContentAlignment.MiddleCenter; 87 moveVerticalDownButton[i].Font = new Font("MS UI Gothic", 18, FontStyle.Regular); 88 moveVerticalDownButton[i].Click += new EventHandler(MoveDown_Click); 89 //左 90 moveHorizonLeftButton[i] = new Button(); 91 moveHorizonLeftButton[i].Text = "→"; 92 moveHorizonLeftButton[i].Name = i.ToString(); 93 moveHorizonLeftButton[i].Location = 94 new Point(startDigitLabelX - _digitLabelSize, 95 startDigitLabelY + i * _digitLabelSize); 96 moveHorizonLeftButton[i].Size = new Size(_digitLabelSize, _digitLabelSize); 97 moveHorizonLeftButton[i].TextAlign = ContentAlignment.MiddleCenter; 98 moveHorizonLeftButton[i].Font = new Font("MS UI Gothic", 18, FontStyle.Regular); 99 moveHorizonLeftButton[i].Click += new EventHandler(MoveLeft_Click); 100 //右 101 moveHorizonRightButton[i] = new Button(); 102 moveHorizonRightButton[i].Text = "←"; 103 moveHorizonRightButton[i].Name = i.ToString(); 104 moveHorizonRightButton[i].Location = 105 new Point(startDigitLabelX + (_rubiksize * _digitLabelSize), 106 startDigitLabelY + i * _digitLabelSize); 107 moveHorizonRightButton[i].Size = new Size(_digitLabelSize, _digitLabelSize); 108 moveHorizonRightButton[i].TextAlign = ContentAlignment.MiddleCenter; 109 moveHorizonRightButton[i].Font = new Font("MS UI Gothic", 18, FontStyle.Regular); 110 moveHorizonRightButton[i].Click += new EventHandler(MoveRight_Click); 111 } 112 Controls.AddRange(moveVerticalUpButton); 113 Controls.AddRange(moveVerticalDownButton); 114 Controls.AddRange(moveHorizonLeftButton); 115 Controls.AddRange(moveHorizonRightButton); 116 ResumeLayout(); 117 } 118 119 private int _clickButtonNum; 120 private string[] _tempDigitLabel; 121 private void MoveUp_Click(object sender, EventArgs e) 122 { 123 IsClickButton = true; 124 _clickButtonNum = int.Parse(((Button)sender).Name); 125 label2.Text = ((Button)sender).Name; 126 for (var i = 0; i < _rubiksize; i++) 127 { 128 _tempDigitLabel[i] = digitLabel[_clickButtonNum + i * _rubiksize].Text; 129 } 130 for (var i = 0; i < _rubiksize; i++) 131 { 132 if (i == 0) 133 { 134 digitLabel[_clickButtonNum + i * _rubiksize].Text = _tempDigitLabel[_rubiksize - 1]; 135 } 136 else 137 digitLabel[_clickButtonNum + i * _rubiksize].Text = _tempDigitLabel[i - 1]; 138 139 } 140 } 141 142 private void MoveDown_Click(object sender, EventArgs e) 143 { 144 145 } 146 147 private void MoveLeft_Click(object sender, EventArgs e) 148 { 149 150 } 151 152 private void MoveRight_Click(object sender, EventArgs e) 153 { 154 155 } 156 157 } 158}
InitializeComponentメソッド内(コントロールは省略しています)
C#
1 // RubikCubeForm 2 // 3 this.AutoScaleDimensions = new System.Drawing.SizeF(27F, 48F); 4 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 5 this.ClientSize = new System.Drawing.Size(778, 644); 6 this.Controls.Add(this.label2); 7 this.Controls.Add(this.label1); 8 this.Controls.Add(this.backToSetupbutton); 9 this.Controls.Add(this.resetbutton); 10 this.Font = new System.Drawing.Font("MS UI Gothic", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); 11 this.Margin = new System.Windows.Forms.Padding(9, 8, 9, 8); 12 this.Name = "RubikCubeForm"; 13 this.StartPosition = 14 System.Windows.Forms.FormStartPosition.CenterScreen; 15 this.Text = "RubikCubeForm"; 16 17 // this.Activated += new System.EventHandler(this.RubikCubeForm_Load); 18 19 this.Load += new System.EventHandler(this.RubikCubeForm_Load); 20 this.ResumeLayout(false); 21 this.PerformLayout(); 22 23
今年のLINEのインターンシップのコーディングテストであったような二次元ルービックキューブを作ろうとしており、動作としては、各列・行にあるボタンをクリックするとクリックした列もしくは行が縦・横に一つずつずれるというものです。しかし上に配置したボタン(Text="↓"のボタンです)をクリックしても列がずれません。ずれるはずの列の各Label(ここではdigitLabel)のTextプロパティの文字はしっかりとずれているのですが画面上に反映されません。 どうすれば画面も反映されるでしょうか。 お詳しいかたお助けください。 追記 ここに出していないコードに問題がありました。というのも、子フォーム(ここでいうsetupForm)で再びサイズ変更をできるようにしようとしており、子フォームで設定したサイズをもとに親フォームの画面も更新させる、ということでActiveになったら発生するActivatedイベントにもRubikCubeForm_Loadメソッドを追加していました。そのActivatedにも追加している文を削除したらうまくいきました。しかし、そこで新たな質問が生まれてしまいました。。なぜ、Activatedに追加するとうまくいかなかったのでしょうか。Activatedの解釈が間違っていますか。質問に追加します。
回答1件
あなたの回答
tips
プレビュー