如何复制控件的全部属性
展开全部
复制全部属性数据也就是深度拷贝对象。
控件不能序列化,那就只有反射来实现深度拷贝了。
C#代码
class 拷贝对象
{
public static T 反射深度拷贝<T>(T obj)
{
//如果是字符串或值类型则直接返回
if (obj is string || obj.GetType().IsValueType) return obj;
object retval = Activator.CreateInstance(obj.GetType());
FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
foreach (FieldInfo field in fields)
{
try { field.SetValue(retval, 反射深度拷贝(field.GetValue(obj))); }
catch { }
}
return (T)retval;
}
}
调用方法,例如要拷贝Button1按钮
Button 新按钮 = 拷贝对象.反射深度拷贝<Button>(Button1);
VB代码
Imports System.Reflection
Public Class 拷贝对象
Public Shared Function 反射深度拷贝(Of T)(obj As T) As T
'如果是字符串或值类型则直接返回
If (TypeOf obj Is String Or obj.GetType().IsValueType) Then Return obj
Dim retval = Activator.CreateInstance(obj.GetType())
Dim fields() = obj.GetType().GetFields(BindingFlags.Public Or BindingFlags.NonPublic _
Or BindingFlags.Instance Or BindingFlags.Static)
For Each field As FieldInfo In fields
Try
field.SetValue(retval, 反射深度拷贝(field.GetValue(obj)))
Catch
End Try
Next
Return retval
End Function
End Class
调用方法,例如要拷贝Button1按钮
Dim 新按钮 As Button = 拷贝对象.反射深度拷贝(Of Button)(Button1)
写了这么多代码,如果满意的话,请及时采纳,谢谢。
引用魔法软糖K的回答:
复制全部属性数据也就是深度拷贝对象。
控件不能序列化,那就只有反射来实现深度拷贝了。
C#代码
class 拷贝对象 { public static T 反射深度拷贝<T>(T obj) { //如果是字符串或值类型则直接返回 if (obj is string || obj.GetType().IsValueType) return obj; object retval = Activator.CreateInstance(obj.GetType()); FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); foreach (FieldInfo field in fields) { try { field.SetValue(retval, 反射深度拷贝(field.GetValue(obj))); } catch { } } return (T)retval; } }调用方法,例如要拷贝Button1按钮
Button 新按钮 = 拷贝对象.反射深度拷贝<Button>(Button1);VB代码
Imports System.ReflectionPublic Class 拷贝对象 Public Shared Function 反射深度拷贝(Of T)(obj As T) As T '如果是字符串或值类型则直接返回 If (TypeOf obj Is String Or obj.GetType().IsValueType) Then Return obj Dim retval = Activator.CreateInstance(obj.GetType()) Dim fields() = obj.GetType().GetFields(BindingFlags.Public Or BindingFlags.NonPublic _ Or BindingFlags.Instance Or BindingFlags.Static) For Each field As FieldInfo In fields Try field.SetValue(retval, 反射深度拷贝(field.GetValue(obj))) Catch End Try Next Return retval End FunctionEnd Class调用方法,例如要拷贝Button1按钮
Dim 新按钮 As Button = 拷贝对象.反射深度拷贝(Of Button)(Button1)写了这么多代码,如果满意的话,请及时采纳,谢谢。
复制全部属性数据也就是深度拷贝对象。
控件不能序列化,那就只有反射来实现深度拷贝了。
C#代码
class 拷贝对象 { public static T 反射深度拷贝<T>(T obj) { //如果是字符串或值类型则直接返回 if (obj is string || obj.GetType().IsValueType) return obj; object retval = Activator.CreateInstance(obj.GetType()); FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); foreach (FieldInfo field in fields) { try { field.SetValue(retval, 反射深度拷贝(field.GetValue(obj))); } catch { } } return (T)retval; } }调用方法,例如要拷贝Button1按钮
Button 新按钮 = 拷贝对象.反射深度拷贝<Button>(Button1);VB代码
Imports System.ReflectionPublic Class 拷贝对象 Public Shared Function 反射深度拷贝(Of T)(obj As T) As T '如果是字符串或值类型则直接返回 If (TypeOf obj Is String Or obj.GetType().IsValueType) Then Return obj Dim retval = Activator.CreateInstance(obj.GetType()) Dim fields() = obj.GetType().GetFields(BindingFlags.Public Or BindingFlags.NonPublic _ Or BindingFlags.Instance Or BindingFlags.Static) For Each field As FieldInfo In fields Try field.SetValue(retval, 反射深度拷贝(field.GetValue(obj))) Catch End Try Next Return retval End FunctionEnd Class调用方法,例如要拷贝Button1按钮
Dim 新按钮 As Button = 拷贝对象.反射深度拷贝(Of Button)(Button1)写了这么多代码,如果满意的话,请及时采纳,谢谢。
展开全部
你这复制的东西没有属性!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询