 <p>Two ways to do this:</p> <p>One way, would be to maintain a list of pointers to the textboxes &amp; labels as you create them:</p> <p>In your class definition, add a private list variable:</p> <pre><code>public partial class Form1 : Form { private List&lt;TextBox&gt; generatedTextboxes = new List&lt;TextBox&gt;(); private List&lt;Label&gt; generatedLabels = new List&lt;Label&gt;(); .... </code></pre> <p>Now, as you create them, add them to the list:</p> <pre><code>//Generate labels and text boxes for (int i = 1; i &lt;= inputNumber; i++) { //Create a new label and text box Label labelInput = new Label(); TextBox textBoxNewInput = new TextBox(); //Keep track of the references generatedTextboxes.Add(textBoxNewInput); generatedLabels.Add(labelInput ); .... </code></pre> <p>Now, when you wish to remove them:</p> <pre><code>for (int i = 1; i &lt;= generatedTextboxes.Count; i++) { this.Controls.Remove(generatedTextboxes[i]); this.Controls.Remove(generatedLabels[i]); } generatedTextboxes.Clear(); generatedLabels.Clear(); </code></pre> <p>Another way, would be to put a <code>Panel</code> control on your form, and add the new textboxes/labels onto that, instead of directly onto the main form. Then, do <code>panel1.Controls.Clear()</code> - to just clear the controls off the panel.</p>