2013-08-07 4 views
-1

런타임에 양식에 TextBox를 추가하고 있는데 이것은 아주 새로운 프로젝트이므로 지금까지 가지고있는 유일한 코드이므로 100 % 확실하지 않습니다. 자신이하고있는 것 :TextBox가 WinForms 양식에 표시되지 않습니다.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      TextBox box = new TextBox(); 
      box.Location = new Point(2, 2); 

      this.Controls.Add(box); 
     } 
    } 
} 

왜 TextBox가 표시되지 않습니까? 전혀 아무것도 없다. 나는 그 곳 모든 곳에서 브레이크 포인트를 설정했지만 그 중 아무 것도 나를 도울 수있는 방법이 없다. 모두 은 정상적으로 보이는 것 같지만입니다.

+0

@HansPassant 여기에 코드에는 아무런 문제가 없습니다. 디자이너를 사용하여 버튼을 추가했습니다. 디자이너가 나머지를 처리합니다. 이 코드가 작동하지 않을 때 button1_Click **이 실행됩니다. MessageBox.Show()로 바꿨습니다. 그리고 버튼을 클릭했을 때 MessageBox가 표시됩니다. 왜 내가 "적절하게 이벤트 핸들러에 가입하지 않는"것이라고 생각하겠습니까? 내가 분명하다는 것은 분명합니다. 그리고 달리 가정 할 이유가 없습니다. 나는 수년간 이것을 해왔다. 문제는 다른 곳에있다. – uSeRnAmEhAhAhAhAhA

+0

@ user2645707 양식에 다른 컨트롤이 있습니까? 귀하의 양식에 'Dock = DockStyle.Fill'이있는'Panel '이 있으므로 추 가된 TextBox를 볼 수 없습니다. –

+2

버튼이 있으면 코드가 완벽하게 작동합니다. 난 그냥 그것을 복제하고 버튼을 클릭하면 왼쪽 상단 모서리에있는 작은 텍스트 상자가있어. – Gloria

답변

1

텍스트 상자를 양식에 추가하는 코드는 button1_Click 이벤트 처리기에 있습니다. 생성자로 이동하면 정상적으로 작동합니다.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      TextBox box = new TextBox(); 
      box.Location = new Point(2, 2); 

      this.Controls.Add(box); 
     } 
    } 
} 
+1

그러면 질문을 올릴 때 언급해야합니다. 도대체 당신이 정말로 묻고있는 것을 예상하려고 노력하는 것은 제 문제가 아닙니다. 반면에 button1_click이 처리되었는지 확인하십시오. 이 줄을 추가해보십시오. button1.Click + = new System.EventHandler (button1_Click); – ChaiNavawongse

+3

@ user2645707 당신은이 사람이 당신을 도와주기 위해 자신의 시간을 갖고 있다는 것을 알고 있습니까? – Curt

+1

@ChaiNavawongse 미안하지만, 그 침략은 당신을위한 것이 아닙니다. 어떤 사람들은 너무 많은 가정과 비난을했기 때문에 나는 좌절감을 느꼈고 때로는 나에게 때때로 도달합니다. 그것은 항상 일어나고 그것들에 대해 잘못되었을 때 열 받게하는 것이 어렵습니다. 그래도 도와 ​​줘서 고마워. – uSeRnAmEhAhAhAhAhA

2

코드는, 내가 생각할 수있는 유일한 이유는 당신이 다른 제어 (추가 TextBox을 충당하기 위해 충분히 넓은) 전에 추가가 매우 간단하고,이 시도 :

private void button1_Click(object sender, EventArgs e) 
    { 
     TextBox box = new TextBox(); 
     box.Location = new Point(2, 2); 
     this.Controls.Add(box); 
     box.BringToFront(); 
    } 

것은 또한 확인 이벤트 핸들러 ControlAdded, 나는 양식이 이벤트 핸들러에 대한 몇 가지 코드가 생각하고 TextBox의 유형이 같은 있는지 추가 컨트롤을 폐기 :

private void form_ControlAdded(object sender, ControlEventArgs e) { 
    if(e.Control is TextBox) Controls.Remove(e.Control); 
} 
+0

감사합니다. BringToFront (50,50에있는 단추가 양식의 유일한 컨트롤 임에도 불구하고)를 시도했지만 이미 필요하지 않으므로 아무런 요점이 없습니다. 그러나 여전히 도움이되지 않았습니다. – uSeRnAmEhAhAhAhAhA

+0

@ user2645707 다시 작성하거나 솔루션을 정리하고 다시 빌드하십시오. 현재 프로젝트에 문제가 있습니다. –

0

비슷한 문제가있었습니다.

코드를 살펴보면 표시되는 텍스트 상자는 System.Windows.Forms.TextBox 유형이고 표시되지 않은 것은 VisualJS.Web.TextBox 유형 인 것으로 나타났습니다. 아마도 당신의 문제는 비슷합니다.

관련 문제