TextBox не отображается в форме WinForms

Я добавляю TextBox к моей форме во время выполнения, и это совершенно новый проект, так что это единственный код, который у меня есть до сих пор, поэтому я на 100% уверен, что это не мое собственное дело:

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 не отображается? Там ничего нет. Я поставил точки останова повсюду, но ни один из них не помог мне. Все кажется нормальным, но нет.

3 ответа

Код очень прост, единственная причина, по которой я могу думать, - это добавить еще один элемент управления (достаточно широкий, чтобы покрыть добавленный 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);
}


Код, который добавляет текстовое поле в форму, находится в обработчике событий 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);
 }
 }
}


У меня была аналогичная проблема.

Глядя на код, я обнаружил, что текстовые поля, которые показывают DO, имеют тип System.Windows.Forms.TextBox, а те, которые НЕ показываются, имеют тип VisualJS.Web.TextBox. Возможно, ваша проблема схожа.

licensed under cc by-sa 3.0 with attribution.