Question: In theory a large 1000+ line of code behind code is "bad practice" what if the majority of the code effects controls on the page? 

For example what if there were 30 text boxes to collect user data, but depending upon answers to questions, visibility, validation, etc changed on these text boxes.

Should you then be writting methods in classes for validation that take collections of text boxes and disable validation, or set the visibility? I'm having a hard time wrapping my mind around the design practices of large code files. 

I guess I'd like to know the best practice for breaking out large code behind files that still allows for easy control manipulation.

Answer: 
I'd devide the text boxes into groups depending on the contents. Make a **User Control** for each group (With a dedicated visual container). A user control can take care of validation and some computations, but it is very readable and can event be reused somewhere else if the problem you are solving allows that.

Another option is to use a **wizard**. This could be more complicated, but if you have the time, you can get nice results.
First of all I do not think 1000+ is not too much for a code behind file at all and I wouldn't consider this bad practice as long as you follow the DRY ( do not repeat yourself ) approach. If you really want to split this up there might be a possibility to have more code behind files for group of controls and do ajax requests to validate parts of the page. You could then evaluate the results from the ajax calls and check if the return message is success and assume that the validation is successfully if all individual ajax calls have a success flag. 

For ASP.NET I do most of the logic on the client side with the knockout framework using the visible binding:
<http://knockoutjs.com/documentation/visible-binding.html>

I use knockout to generate the controls via foreach binding and set the visible binding to an observable inside the obserable array. If the array you pass to the foreach binding is an obserable array you can also add / remove controls via JS. 

You could use a validation framework and on validation you can change the observable array adding more questions / removing questions from HTTP post. 

Another option would be to do the validation on the server side.
You can check in the post method the values which have been submitted and change the view model adding or removing elements. You then return the view with the modified model.

If required I would use a strongly typed collection to have a reference for the page elements and modify the properties as required.

For WPF I use Observable collections to track property change events which notifies the UI when the collection changes.