2017-11-30 17 views
1

N * MサイズSUDOKUのゲームを作っています。すべての数字はボタン上にあります。 プログラム開始のすべてのボタンが空で、ボタンをクリックすると小さなパネルが表示され、各番号のボタンで選択してください。c#マウスのダイナミックパネル

private void adatB_Click(object sender, EventArgs e) 
    { 
     Button button = sender as Button; 
     int[] hely = button.Tag.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(Int32.Parse).ToArray(); 
     Panel szamok = new Panel 
     { 
      Location = MousePosition, 
      Size = new Size(100, 100) 
     }; 
     Controls.Add(szamok); 
     TableLayoutPanel minitabla = new TableLayoutPanel 
     { 
      Dock = DockStyle.Fill, 
      ColumnCount = szorzat, 
      RowCount = szorzat, 
     }; 
     for (int i = 0; i < szorzat; i++) 
     { 
      minitabla.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); 
      minitabla.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); 
     } 
     szamok.Controls.Add(minitabla); 
     Button[,] szamokB = new Button[meret[0], meret[1]]; 
     int d = 1; 
     for (int i = 0; i < meret[0]; i++) 
     { 
      for (int j = 0; j < meret[1]; j++) 
      { 
       szamokB[i, j] = new Button(); 
       szamokB[i, j].Tag= hely[0]+","+hely[1]; 
       szamokB[i, j].Text = d.ToString(); 
       szamokB[i, j].Dock = DockStyle.Fill; 
       szamokB[i, j].Click += szamokB_Click; 
       minitabla.Controls.Add(szamokB[i, j], i, j); 
       d++; 
      } 
     } 
    } 

    private void szamokB_Click(object sender, EventArgs e) 
    { 
     Button button = sender as Button; 
     int[] hely = button.Tag.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(Int32.Parse).ToArray(); 
     adatB[hely[0], hely[1]].Text = button.Text; 
    } 

ボタンをクリックしたときの問題は、ペインが作成されていないことです。 meret [0]変数はNであり、単なる[1]はMであり、adatBはタグ内のpositonsを持つボタンのarryです。 番号を選んだ場合、どうすればそのパネルを閉じることができますか?

答えて

1

まず、マウスの位置を正しく計算する必要があります。 MSDNから

は、画面座標におけるマウスカーソルの位置を取得します。

あなたはこのようなものを使用する必要がありますあなたはおそらく、フロントにあなたのパネルを持って、これを必要とします

Location = new Point(MousePosition.X - this.Location.X, MousePosition.Y - this.Location.Y) 

を:

Controls.Add(szamok); 
szamok.BringToFront(); 

あなたがチューを格納できるパネルを閉じるにはパネルから削除して後でコントロールから削除できます。

public partial class Form1 : Form 
{ 
    private Panel myPanel = null; 

    private void adatB_Click(object sender, EventArgs e) 
    { 
     ... 

     Panel szamok = new Panel 
     { 
      Location = new Point(MousePosition.X - this.Location.X, MousePosition.Y - this.Location.Y), 
      Size = new Size(100, 100) 
     }; 

     if (this.myPanel != null) 
     { 
      this.Controls.Remove(this.myPanel); 
     } 
     this.myPanel = szamok; 

     Controls.Add(szamok); 
     szamok.BringToFront(); 

     ... 
    } 

    private void szamokB_Click(object sender, EventArgs e) 
    { 
     if (this.myPanel != null) 
     { 
      this.Controls.Remove(this.myPanel); 
      this.myPanel = null; 
     } 

     ... 
    } 
} 
関連する問題