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.