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 ❤️!
Conviertete en un programador más sociable