一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

WinForm控件開(kāi)發(fā)總結(jié)(七)-----為復(fù)雜屬性的子屬性提供編輯功能

      前面的幾篇文章中,我們給控件添加一個(gè)復(fù)雜的類型Scope,并且給它的類型提供的一個(gè)類型轉(zhuǎn)換器,現(xiàn)在我們可以在屬性瀏覽器中編輯它的值,并且它的值也被串行化的源代碼里了。但是你有沒(méi)有發(fā)現(xiàn),在屬性瀏覽器里編輯這個(gè)屬性的值還是不太方便。因?yàn)閷傩灾皇?ldquo;10200這種形式的,所以,你必須按照這種格式來(lái)修改,一旦格式錯(cuò)誤就會(huì)引發(fā)異常,比如輸入一個(gè)“10200。我們期望這個(gè)屬性的每一子屬性都能夠被獨(dú)立的編輯就好了,這并非不能實(shí)現(xiàn),而且實(shí)現(xiàn)還很簡(jiǎn)單。
      為了在屬性瀏覽器里能夠獨(dú)立的編輯子屬性,我們還要重寫兩個(gè)方法:GetPropertiesSupported()和GetProperties();下面是ScopeConverter的完整代碼:
   public class ScopeConverter : TypeConverter
    
{
        
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        
{
            
if (sourceType == typeof(String)) return true;

            
return base.CanConvertFrom(context, sourceType);
        }


        
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        
{
            
if (destinationType == typeof(String)) return true;

            
if (destinationType == typeof(InstanceDescriptor)) return true;

            
return base.CanConvertTo(context, destinationType);
        }


        
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.
CultureInfo culture, 
object value, Type destinationType)
        
{
            String result 
= "";
            
if (destinationType == typeof(String))
            
{
                Scope scope 
= (Scope)value;
                result 
= scope.Min.ToString()+"," + scope.Max.ToString();
                
return result;

            }


            
if (destinationType == typeof(InstanceDescriptor))
            
{
                ConstructorInfo ci 
= typeof(Scope).GetConstructor(new Type[] {typeof(Int32),
typeof
(Int32) }
);
                Scope scope 
= (Scope)value;
                
return new InstanceDescriptor(ci, new object[] { scope.Min,scope.Max });
            }

            
return base.ConvertTo(context, culture, value, destinationType);
        }


        
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.
CultureInfo culture, 
object value)
        
{
            
if (value is string)
            
{
                String[] v 
= ((String)value).Split(',');
                
if (v.GetLength(0!= 2)
                
{
                    
throw new ArgumentException("Invalid parameter format");
                }


                Scope csf 
= new Scope();
                csf.Min 
= Convert.ToInt32(v[0]);
                csf.Max 
= Convert.ToInt32(v[1]);
                
return csf;
            }

            
return base.ConvertFrom(context, culture, value);
        }


        
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
        
{
            
return true;
        }


        
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context,
object
 value, Attribute[] attributes)
        
{
            
return TypeDescriptor.GetProperties(typeof(Scope), attributes);
        }

}

NET技術(shù)WinForm控件開(kāi)發(fā)總結(jié)(七)-----為復(fù)雜屬性的子屬性提供編輯功能,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 色综合久久88 | 在线亚洲精品国产成人二区 | 国产视频二区 | 国产乱码一区二区三区四川人 | 伊人色综合久久 | 久青草国产在线视频亚瑟影视 | 国产精选第一页 | 青春草久久 | 黄色国产在线观看 | 黄色在线视频播放 | 69国产| 涩涩涩涩涩涩涩涩涩涩 | 国产精品www夜色影视 | 国产精品欧美亚洲韩国日本久久 | 日本一区二区三区四区公司 | 四虎激情影院 | 国产精品福利在线观看秒播 | 火辣福利视频 | 亚洲伊人久久大香线蕉苏妲己 | 免费永久在线观看污污的网站 | 伊人久久综在合线亚洲91 | 免费三级网 | 亚洲综合在线最大成人 | 欧美一区二区自偷自拍视频 | 亚洲国产成人超福利久久精品 | 久久国产欧美日韩高清专区 | 午夜国产高清精品一区免费 | 久久青青草原精品国产软件 | 三级日韩 | 91国内精品视频 | 99精品久久99久久久久久 | 日本高清www视频在线观看 | 天天拍夜夜添久久精品免费 | 国内激情视频 | 久久久影院| 春暖花开亚洲x8永久地址 | 爱丝福利视频 | 免费xxxxx在线观看网站 | 日本一二三区免费 | 亚洲一区二区三区成人 | 色米奇777 |