一区二区久久-一区二区三区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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产日韩欧美精品一区二区三区 | 久久伊人热 | 亚洲一区精品中文字幕 | 成人观看天堂在线影片 | 亚洲国产成人在线观看 | 国产手机在线精品 | 精品国产九九 | 91播放在线| 天天射天天干天天色 | 国产精品自在自线免费观看 | 自拍 欧美 日韩 | 国产在线免 | 国产对白精品刺激一区二区 | 国产成人综合精品 | 狠狠色噜噜狠狠狠97影音先锋 | 人人干国产 | 亚洲欧美在线免费 | 色成年激情久久综合 | heyzo国产亚洲高清 | 加勒比精品久久一区二区三区 | 国产福利91精品一区二区 | a中文字幕1区 | 国产aⅴ精品一区二区三区久久 | 色哟哟免费在线观看 | 一道本一区二区三区 | yellow中文字幕久久网 | 色美女在线 | 亚洲一区在线免费 | 中文字幕日韩一区二区三区不 | 久久综合色婷婷 | 激情六月婷婷开心丁香开心 | 网红毛片 | 天天天干| 国语精品| 最色网在线观看 | 色多多网| 国产免费美女 | 美女国内精品自产拍在线播放 | 中文字幕 亚洲精品 第1页 | 久久私人影院 | 欧美一级高跟鞋鞋交 |