Aprende a resolver el problema en el diseñador de formularios de Visual Studio cuando tiene 2 clases en el mismo archivo

Cómo resolver la excepción de Visual Studio Form Render: la clase Form puede diseñarse, pero no es la primera clase en el archivo

A veces, cuando trabaja en su código, es posible que no note que algunas acciones pueden dañar otra área de su proyecto. Esta excepción es habitual en desarrolladores perezosos que declaran varias clases dentro de un solo archivo. El problema es cuando agrega varias clases de un archivo que contiene una clase que extiende la clase Form de .net (se representará en el diseñador), por lo que cuando la primera clase del archivo no es la que extiende la clase Form , el renderizador fallará.

En este artículo, le explicaremos fácilmente cómo solucionar esta excepción en su renderizador.

1. Verifique si la clase con el problema realmente contiene 2 clases

Básicamente, el error se desencadena como se mencionó, debido a la existencia de 2 clases en un solo archivo, por ejemplo, el siguiente archivo Form1.cs contiene 2 clases dentro del mismo espacio de nombres:

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

namespace Sandbox
{
    // Clase #1
    public class Wow64Interop
    {
        [DllImport("Kernel32.Dll", EntryPoint = "Wow64DisableWow64FsRedirection")]
        public static extern bool DisableWow64FSRedirection(bool disable);
    }

    // Clase #2
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello");
        }
    } 
}

El renderizador de formularios de Windows siempre tomará la primera clase dentro del archivo para renderizar el formulario. Como en nuestro caso, la primera clase que puede encontrar es la lase  Wow64Interop, el renderizador arrojará la excepción ya que no puede representar una clase que no amplíe la clase Form de .NET.

2. Si hay otra clase, establezca la clase Form como primera

Para resolver el problema, simplemente cambie el orden de la clase en su archivo, por ejemplo:

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

namespace Sandbox
{
    // Clase #2
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello");
        }
    }

    // Clase #1
    public class Wow64Interop
    {
        [DllImport("Kernel32.Dll", EntryPoint = "Wow64DisableWow64FsRedirection")]
        public static extern bool DisableWow64FSRedirection(bool disable);
    }
}

Tenga en cuenta también que no solo por conveniencia sino también por facilidad de mantenimiento, cada clase debe estar dentro de un solo archivo . La misma lógica se aplica a otros lenguajes como Visual Basic.

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores