<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      WinForm控件開發總結(六)-----控件屬性類型轉換器代碼詳解

            在上一篇文章,我為控件添加一個一個復雜屬性,并且為這個屬性的類型的編寫了一個類型轉換器,現在我們來看看這個類型轉換器的代碼,并解釋一下這些代碼的意義。
             要實現一個類型轉換器,我們必須要重寫(override)四個方法:
             CanConvertFrom()――根據類型參數進行測試,判斷是否能從這個類型轉換成當前類型,在本例中我們只提供轉換stringInstanceDescriptor類型的能力
             CanConvertTo()――根據類型參數進行測試,判斷是否能從當前類型轉換成指定的類型。
             ConvertTo()――將參數value的值轉換為指定的類型。
             ConvertFrom()――串換參數value,并返回但書類型的一個對象。
            
       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);
              }


               上面是ConvertTo的實現,如果轉換的目標類型是string,我將Scope的兩個屬性轉換成string類型,并且用一個“,”連接起來,這就是我們在屬性瀏覽器里看到的表現形式,如圖:
            
            如果轉換的目標類型是實例描述器(InstanceDescriptor,它負責生成實例化的代碼),我們需要構造一個實例描述器,構造實例描述器的時候,我們要利用反射機制獲得Scope類的構造器信息,并在new的時候傳入Scope實例的兩個屬性值。實例描述器會為我們生成這樣的代碼:this.myListControl1.Scope = new CustomControlSample.Scope(10, 200);在最后不要忘記調用 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);
              }

          }

            上面是ConvertFrom的代碼,由于系統能夠直接將實例描述器轉換為Scope類型,所以我們就沒有必要再寫代碼,我們只需要關注如何將String(在屬性瀏覽出現的屬性值的表達)類型的值轉換為Scope類型。沒有很復雜的轉換,只是將這個字符串以“,”分拆開,并串換為Int32類型,然后new一個Scope類的實例,將分拆后轉換的兩個整型值賦給Scope的實例,然后返回實例。在這段代碼里,我們要判斷一下用戶設定的屬性值是否有效。比如,如果用戶在Scope屬性那里輸入了“10200,由于沒有輸入“,”,我們無法將屬性的值分拆為兩個字符串,也就無法進行下面的轉換,所以,我們要拋出一個異常,通知用戶重新輸入。   
      posted @ 2006-12-14 21:45  綸巾客  閱讀(10506)  評論(5)    收藏  舉報
      主站蜘蛛池模板: 狼人大伊人久久一区二区| 色欲天天婬色婬香综合网| 不卡乱辈伦在线看中文字幕| 人人入人人爱| 国产午夜亚洲精品国产成人| 99精品人妻少妇一区| 精品无人乱码一区二区三区| 大方县| 欧洲美熟女乱av在免费| 亚洲中文字幕国产综合| 日韩欧美人妻一区二区三区| 亚洲精品成人老司机影视| 狠狠亚洲色一日本高清色| 午夜福利啪啪片| 91色老久久精品偷偷性色| 日韩中文字幕av有码| 国产97色在线 | 免费| 国产美女直播亚洲一区色| 久久精品国产亚洲av天海翼| 久久精品人成免费| 天天爽天天摸天天碰| 国产性生大片免费观看性| 国产一区二区三区内射高清| 国产一区二区三区怡红院| 久热久精久品这里在线观看| 国产亚洲av夜间福利香蕉149| free性开放小少妇| 蜜臀91精品高清国产福利| 亚洲粉嫩av一区二区黑人| 在线观看潮喷失禁大喷水无码| 成人精品国产一区二区网| 人妻丰满熟妇av无码区| 天堂一区二区三区av| 激情的视频一区二区三区| 欧美zoozzooz性欧美| 国内自拍视频一区二区三区| 成人网站网址导航| 亚洲国产aⅴ成人精品无吗| 麻豆一区二区三区香蕉视频| 亚洲伊人五月丁香激情| 性欧美vr高清极品|