Winforms 自定义序列化后的.NET控件类型?

Winforms 自定义序列化后的.NET控件类型?,winforms,serialization,c#-4.0,.net-4.0,controls,Winforms,Serialization,C# 4.0,.net 4.0,Controls,在出于某种目的将.NET控件对象序列化为自定义对象(即MyControlObject)和另一个进程的过程中,我需要以自定义方式重新绘制这些控件。我需要知道它是什么类型(按钮、文本框、组合框、文本字段、日历、ToolStrip、TtoolstripMenu、RichTextBox、TabControl或TreeView)。我可能需要一种typeOf(RichTextBox)==RichTextBox来检查。是的: if (sayMyControlObject.GetType() == typeof

在出于某种目的将.NET控件对象序列化为自定义对象(即MyControlObject)和另一个进程的过程中,我需要以自定义方式重新绘制这些控件。我需要知道它是什么类型(按钮、文本框、组合框、文本字段、日历、ToolStrip、TtoolstripMenu、RichTextBox、TabControl或TreeView)。我可能需要一种
typeOf(RichTextBox)==RichTextBox
来检查。

是的:

if (sayMyControlObject.GetType() == typeof(TextBox))

可以,但根据您对每个语句所做的操作,最好将其封装到switch语句中,如下所示:

switch (config.GetType().Name)
{
      case "TextBox":

      break;

      case "ComboBox":

      break;

      //etc...
}

实际上,我已经将“Control”整个对象序列化为某个自定义对象(CustomControl),然后逐位转换并将数据转移到“CustomControl”对象。因此,这没有可用的函数“GetType”,它只是拥有System.Forms.Control中的所有属性。如果它是从“Control”继承的,则应该这样做,并且它不是一个属性,而是一个方法如果我将从控件继承它,它将通过异常“System.Forms.Controls”无法序列化。。。所以我没有继承它,我想我需要一些自定义逻辑,比如说我的CustomControl中的某个对象,当它被序列化到其他进程时,它会告诉我它是什么类型的控件我想我在object中有字符串,它会告诉我对象的名称,我将使用这个字符串作为比较所有对象都应该有一个GetType方法,但是,您是如何隐藏它的?!如果没有,您将需要一种查找其类型的方法,即使用您建议的字符串
switch (config.GetType().Name)
{
      case "TextBox":

      break;

      case "ComboBox":

      break;

      //etc...
}
Control c = yourControl;
Type controlType = yourControl.GetType(); // will give you the type
string controlTypeName = controlType.Name; // will give you the name of the type