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

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

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

      WinForm控件開發總結(五)-----為控件的復雜屬性提供類型轉換器

            上一篇文章我已經介紹了TypeConverterAttribute元數據的作用,本文將通過代碼向你展示具體的實現。在這個例子中,我要給控件添加一個復雜的屬性,這個屬性對這個控件沒有什么功用,純粹是為了演示,有些牽強附會了。
             現在在前一篇文章中的創建的控件代碼中添加一個Scope屬性:
            
              [Browsable(true)]
              
      public Scope Scope
              
      {
                  
      get
                  
      {
                      
      return _scope;
                  }

                  
      set
                  
      {
                      _scope 
      = value;
                  }

              }

            這個屬性的類型是Scope類,代碼如下:
      public class Scope
          
      {
              
      private Int32 _min;
              
      private Int32 _max;

              
      public Scope()
              
      {
              }


      public Scope(Int32 min, Int32 max)
              
      {
                  _min 
      = min;
                  _max 
      = max;
              }


              [Browsable(
      true)]
              
      public Int32 Min
              
      {
                  
      get
                  
      {
                      
      return _min;
                  }

                  
      set
                  
      {
                      _min 
      = value;
                  }

              }


              [Browsable(
      true)]
              
      public Int32 Max
              
      {
                  
      get
                  
      {
                      
      return _max;
                  }

                  
      set
                  
      {
                      _max 
      = value;
                  }

                 
              }

      }

             添加完屬性后,build控件工程,然后在測試的工程里選中添加的控件,然后在屬性瀏覽器里觀察它的屬性,發現Scope屬性是灰的,不能編輯。前一篇文章提到了,在屬性瀏覽器里可以編輯的屬性都是有類型轉換器的,而.NET框架為基本的類型和常用的類型都提供了默認的類型轉換器。接下來我們為Scope類添加一個類型轉換器,以便這個屬性能夠被編輯,而且也可以在源代碼文件里自動生成相應的代碼。下面是類型轉換器的代碼:
            

      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);
              }

          }


            現在我們為類型提供類型轉換器,我們在類型前面添加一個TypeConverterAttribute,如下:
                 
          [TypeConverter(typeof(ScopeConverter))]
          
      public class Scope
              添加完以后build工程,然后切換到測試工程,選中控件,在屬性瀏覽器里查看屬性,現在的Scope屬性可以編輯了,如下圖所示: 
               
               我們修改默認的值,然后看看Form設計器為我們生成了什么代碼:
            
      this.myListControl1.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                  
      this.myListControl1.Item.Add(1);
                  
      this.myListControl1.Item.Add(2);
                  
      this.myListControl1.Item.Add(3);
                  
      this.myListControl1.Item.Add(6);
                  
      this.myListControl1.Item.Add(8);
                  
      this.myListControl1.Item.Add(9);
                  
      this.myListControl1.Location = new System.Drawing.Point(1234);
                  
      this.myListControl1.Name = "myListControl1";
                  
      this.myListControl1.Scope = new CustomControlSample.Scope(10200);
                  
      this.myListControl1.Size = new System.Drawing.Size(220180);
                  
      this.myListControl1.TabIndex = 1;
              
      this.myListControl1.Text = "myListControl1";
              關鍵是這一行this.myListControl1.Scope = new CustomControlSample.Scope(10, 200),Scope類的類型轉換器為屬性提供了實例化的代碼。      
      posted @ 2006-12-11 22:55  綸巾客  閱讀(14018)  評論(16)    收藏  舉報
      主站蜘蛛池模板: 成人网站免费在线观看| 国产精品人成视频免| 日本精品aⅴ一区二区三区| 少妇人妻偷人免费观看| 精品九九人人做人人爱| 国产一区二区亚洲精品| 九九热精品免费视频| 91精品乱码一区二区三区| 国产99在线 | 亚洲| 午夜免费视频国产在线| 男女爽爽无遮挡午夜视频| 欧美丰满熟妇xxxx性| 国产成人精品一区二区无| 特黄 做受又硬又粗又大视频| 性色在线视频精品| 综合偷自拍亚洲乱中文字幕| 婷婷六月色| 少妇无套内谢免费视频| 亚洲国模精品一区二区| 日本欧美一区二区三区在线播放| 富宁县| 国产精品成人网址在线观看 | 野外做受三级视频| 在线看片免费人成视频久网| 丰满爆乳一区二区三区| 久久国产精品老人性| 久久精品av国产一区二区| 最新精品国产自偷在自线| 久久9精品区-无套内射无码| 亚洲综合国产伊人五月婷| 人妻少妇偷人无码视频| 日本一区二区三区专线| 亚洲欧美日韩综合久久久| 国产精品免费看久久久| 日韩精品一区二区都可以| 性中国videossexo另类| 中文字幕久久波多野结衣av| 激情欧美日韩一区二区| 国产精品免费无遮挡无码永久视频| 国产在线视频导航| av色蜜桃一区二区三区|