【问题标题】:Type of .NET control after custom based serialization?基于自定义的序列化后的.NET控件类型?
【发布时间】:2011-05-18 15:46:42
【问题描述】:

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

【问题讨论】:

    标签: winforms serialization c#-4.0 .net-4.0 controls


    【解决方案1】:

    是的:

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

    if (sayMyControlObject is TextBox)
    

    会这样做,但取决于你对每个人所做的事情,将它封装到 switch 语句中可能会更好,如下所示:

    switch (config.GetType().Name)
    {
          case "TextBox":
    
          break;
    
          case "ComboBox":
    
          break;
    
          //etc...
    }
    

    【讨论】:

    • 实际上我已经将“Control”整个对象序列化为一些自定义对象(CustomControl)并逐位转换并将数据转移到“CustomControl”对象。所以这没有可用的函数“GetType”,它只是拥有 System.Forms.Control 中的所有属性。
    • 继承自“Control”应该可以,不是属性而是方法
    • 如果我从控件继承它,它将通过异常“System.Forms.Controls”不能被序列化......所以我没有继承它,我想我需要一些自定义逻辑,比如说 MyCustomControl 中的某个对象,当它被序列化到其他进程时,它会告诉它是什么类型的控件
    • 我想我在对象中有字符串,它会告诉我对象的名称,我会用这个字符串作为比较
    • 所有对象都应该有一个 GetType 方法,你是如何设法隐藏它的?!如果不是,您将需要一种找到它的类型的方法,即。使用您建议的字符串
    【解决方案2】:
    Control c = yourControl;
    Type controlType = yourControl.GetType(); // will give you the type
    string controlTypeName = controlType.Name; // will give you the name of the type
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多