2017-11-12 8 views
-1

私はコードを介して新しいPictureboxを作成していますが、今私のTextBoxesは私に値を与えていません。私は、彼らが焦点から出たと思います、または彼らのコントロールはもはや機能していない、ここでのコードは、これまでのところです:C#私は新しいPictureboxを作成し、私のTextboxesは戻って私に値を与えません

private void button1_Click(object sender, EventArgs e) 
    { 

     int ErrorCode = 0; 
     string NewName = NewPointName.Text; 
     int X, Y; 

     Application.DoEvents(); 

     if (NewPointName.Text == "") 
      ErrorCode = 1; 
     else 
      for (int i = 0; i < Names + 1; i++) 
      { 
       if (PointName[i] == NewName) 
        ErrorCode = 2; 
      } 
     if (ErrorCode > 0) 
      MessageBox.Show("Error " + ErrorCode); 
     else 
     { 
      if (Convert.ToInt32(NewPointXBox.Text) > 60) 
       X = 60; 
      else if (Convert.ToInt32(NewPointXBox.Text) < -60) 
       X = -60; 
      else if (NewPointXBox.Text == "") 
       X = 0; 
      else 
       X = Convert.ToInt32(NewPointXBox.Text); 

      if (Convert.ToInt32(NewPointYBox.Text) > 60) 
       Y = 60; 
      else if (Convert.ToInt32(NewPointYBox.Text) < -60) 
       Y = -60; 
      else if (NewPointYBox.Text == "") 
       Y = 0; 
      else 
       Y = Convert.ToInt32(NewPointYBox.Text); 

      Punkt.GiveName(NewName, Names); 
      Punkt.GiveCoordinates(X, Y, Names); 
      PointName[Names] = NewName; 
      NewPointName.Text = ""; 
      NewPointXBox.Text = ""; 
      NewPointYBox.Text = ""; 
      Application.DoEvents(); 
      UpdatePoint(); 
      CreatePoint(X, Y, NewName, Names); 
      Names++; 
      ErrorCode = 0; 
      NewName = ""; 
     } 


    } 

public void CreatePoint(int X, int Y, string name, int i) 
     { 
      int StartPointX = 450, StartPointY = 450, Factor = 7; 
      if (RadioG6060.Checked) 
      { 
       StartPointX = 454; 
       StartPointY = 449; 
       Factor = 7; 
      } 

      Dot[i] = new PictureBox(); 
      this.Controls.Add(Dot[i]); 
      Dot[i].Name = "PB_" + name; 
      Dot[i].Size = new Size(10, 10); 
      Dot[i].Image = Image.FromFile("../Dot.png"); 
      Dot[i].Anchor = AnchorStyles.Left; 
      Dot[i].Location = new Point(StartPointX, StartPointY); 
      Dot[i].Visible = true; 
      InitializeComponent(); 
      Dot[i].BringToFront(); 
      Dot[i].Location = new Point(Dot[i].Location.X + (X * Factor), Dot[i].Location.Y - (Y * Factor)); 
      Application.DoEvents(); 
     } 

私はそれをオフに投げることthis.controls.Add(Dot[i])だと思う、今私はテキストにアクセスすることはできませんので、私のNewPointNameテキストボックス。

フォームにプログラムのフォーカスを戻すにはどうすればよいですか、一般的にボックスを再びアクティブにすることができるものは何ですか?

+0

「NewPointNameテキストボックスのテキストにアクセスできません」という意味はどうですか?あなたは何をしようとしていますか、それはどういうわけではありませんか/あなたは何の結果を得ていますか? - なぜ、あなたはどこでも 'Application.DoEvents()'を呼びますか? –

+0

あなたのコードの最下部で、あなたの 'NewPointName'テキストボックスの値をクリアすることを知っていれば幸いです:' NewPointName.Text = ""; –

+0

私は知っていますが、それらはプログラムのUIで上書きされます。 – ExoSkull

答えて

0

私はただ問題を解決しましたが、私はちょうどInitializeComponent()を残さなければなりませんでした。あなたがそうするならば、既に存在するコンポーネントはブロックされ、それ以上のオプションではそれ以上変更することはできません。

+0

ああ、私は私の電話から読んでいたので、その行を逃した。はい、あなたは 'InitializeComponent()'を何度も呼び出すべきではありません。それはデザイナー** _によって追加されたコントロールのプロパティを設定することだけです。 'InitializeComponent()'は** once **と呼ばれるだけで、フォームのコンストラクタにあります。 –

関連する問題