none
自定义控件三角型问题 mvp级别 RRS feed

  • 问题

  • 未命名.JPG

    这个问题我以前有发帖过,不过就是没人回应,今天我再次拿出来向大家讨论讨论。
    那个三角型是怎么做到的。。。我如何在里面添加我想要的属性。。。
    • 已编辑 tssing 2009年2月7日 14:29
    2009年2月7日 14:10

答案

  • 似乎反编一下看看比较方便  T_T
    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 tssing 2009年2月7日 14:25
    • 已标记为答案 tssing 2009年2月7日 14:29
    2009年2月7日 14:23
  •      我想自己制作一个超简单的控件。。。。
    • 已标记为答案 tssing 2009年2月7日 14:26
    2009年2月7日 14:26
  •  研究了下  textbox  唯一进入行为窗口的 MutilLine 属性

     

    发现 似乎还是属性的特性设置

    [SRDescription("TextBoxMultilineDescr"), Localizable(true), RefreshProperties(RefreshProperties.All), SRCategory("CatBehavior"), DefaultValue(false)]  
    public virtual bool Multiline  
    {  
        get 
        {  
            return this.textBoxFlags[multiline];  
        }  
        set 
        {  
            if (this.textBoxFlags[multiline] != value)  
            {  
                using (LayoutTransaction.CreateTransactionIf(this.AutoSize, this.ParentInternal, this, PropertyNames.Multiline))  
                {  
                    this.textBoxFlags[multiline] = value;  
                    if (value)  
                    {  
                        base.SetStyle(ControlStyles.FixedHeight, false);  
                    }  
                    else 
                    {  
                        base.SetStyle(ControlStyles.FixedHeight, this.AutoSize);  
                    }  
                    base.RecreateHandle();  
                    this.AdjustHeight(false);  
                    this.OnMultilineChanged(EventArgs.Empty);  
                }  
            }  
        }  
    }  
       
     
       
     

     

    另一个属性 就没有这么多说明

    [SRDescription("TextBoxAcceptsTabDescr"), SRCategory("CatBehavior"), DefaultValue(false)]  
    public bool AcceptsTab  
    {  
        get 
        {  
            return this.textBoxFlags[acceptsTab];  
        }  
        set 
        {  
            if (this.textBoxFlags[acceptsTab] != value)  
            {  
                this.textBoxFlags[acceptsTab] = value;  
                this.OnAcceptsTabChanged(EventArgs.Empty);  
            }  
        }  
    }  
       
     
       
     




    根据进一步研究 以上全是错的 


    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月7日 14:34
  • 你是怎么反编译的。。。
    • 已标记为答案 tssing 2009年2月7日 14:41
    2009年2月7日 14:40
  • 果然 顺藤摸瓜 

     

    找到了

    internal class TextBoxActionList : DesignerActionList  
    {  
        // Methods  
        public TextBoxActionList(TextBoxDesigner designer);  
        public override DesignerActionItemCollection GetSortedActionItems();  
     
        // Properties  
        public bool Multiline { getset; }  
    }  
     
       
    Expand Methods  
       
     
    只有一个 mutilline 属性
    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 tssing 2009年2月7日 15:10
    2009年2月7日 15:05
  • 高深高深,还不是很明白。
    • 已标记为答案 tssing 2009年2月7日 15:13
    2009年2月7日 15:11
  • 难得我能帮上你一次  好开心啊


    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 tssing 2009年2月7日 15:13
    2009年2月7日 15:12
  • 我还真没看出来那里可以自定义三角型

    那软件我下载了,很好用。。

    • 已标记为答案 tssing 2009年2月7日 15:51
    2009年2月7日 15:29
  •  public override DesignerActionListCollection ActionLists { get; }

    这个里面返回的 DesignerActionListCollection   会直接在三角形点出来的窗体里面显示出来的

     

     


    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 tssing 2009年2月7日 15:51
    2009年2月7日 15:33
  • 貌似重写很有用呀。。。。。

    突然楼住太英明了

    这么多满意答案 连自己都有份儿

    • 已标记为答案 tssing 2009年2月8日 2:03
    2009年2月8日 1:31
  • 实际上我还是不明白
    • 已标记为答案 tssing 2009年2月8日 8:40
    2009年2月8日 8:40
  • 得到reflector,是我真正的朋友。太好用了.
    • 已标记为答案 tssing 2009年2月8日 11:18
    2009年2月8日 11:12
    • 已标记为答案 tssing 2009年2月8日 13:13
    2009年2月8日 11:25
    版主

全部回复

  • 似乎反编一下看看比较方便  T_T
    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 tssing 2009年2月7日 14:25
    • 已标记为答案 tssing 2009年2月7日 14:29
    2009年2月7日 14:23
  •      我想自己制作一个超简单的控件。。。。
    • 已标记为答案 tssing 2009年2月7日 14:26
    2009年2月7日 14:26
  •  研究了下  textbox  唯一进入行为窗口的 MutilLine 属性

     

    发现 似乎还是属性的特性设置

    [SRDescription("TextBoxMultilineDescr"), Localizable(true), RefreshProperties(RefreshProperties.All), SRCategory("CatBehavior"), DefaultValue(false)]  
    public virtual bool Multiline  
    {  
        get 
        {  
            return this.textBoxFlags[multiline];  
        }  
        set 
        {  
            if (this.textBoxFlags[multiline] != value)  
            {  
                using (LayoutTransaction.CreateTransactionIf(this.AutoSize, this.ParentInternal, this, PropertyNames.Multiline))  
                {  
                    this.textBoxFlags[multiline] = value;  
                    if (value)  
                    {  
                        base.SetStyle(ControlStyles.FixedHeight, false);  
                    }  
                    else 
                    {  
                        base.SetStyle(ControlStyles.FixedHeight, this.AutoSize);  
                    }  
                    base.RecreateHandle();  
                    this.AdjustHeight(false);  
                    this.OnMultilineChanged(EventArgs.Empty);  
                }  
            }  
        }  
    }  
       
     
       
     

     

    另一个属性 就没有这么多说明

    [SRDescription("TextBoxAcceptsTabDescr"), SRCategory("CatBehavior"), DefaultValue(false)]  
    public bool AcceptsTab  
    {  
        get 
        {  
            return this.textBoxFlags[acceptsTab];  
        }  
        set 
        {  
            if (this.textBoxFlags[acceptsTab] != value)  
            {  
                this.textBoxFlags[acceptsTab] = value;  
                this.OnAcceptsTabChanged(EventArgs.Empty);  
            }  
        }  
    }  
       
     
       
     




    根据进一步研究 以上全是错的 


    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月7日 14:34
  • 你是怎么反编译的。。。
    • 已标记为答案 tssing 2009年2月7日 14:41
    2009年2月7日 14:40
  • 错了错了

     根据textbox 的特性声明

    [Designer("System.Windows.Forms.Design.TextBoxDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), SRDescription("DescriptionTextBox"), ComVisible(true), ClassInterface(ClassInterfaceType.AutoDispatch)]

    在 system.design.dll

     

    里面有个

     

    internal class TextBoxDesigner : TextBoxBaseDesigner  
    {  
        // Fields  
        private DesignerActionListCollection _actionLists;  
     
        // Methods  
        public TextBoxDesigner();  
        protected override void PreFilterProperties(IDictionary properties);  
     
        // Properties  
        public override DesignerActionListCollection ActionLists { get; }  
        private char PasswordChar { get; set; }  
    }  
     
       
    Expand Methods  
       
     

     

    这个是 特性调用的设计器  这个实际器有一个属性 是

    public override DesignerActionListCollection ActionLists  
    {  
        get  
        {  
            if (this._actionLists == null)  
            {  
                this._actionLists = new DesignerActionListCollection();  
                this._actionLists.Add(new TextBoxActionList(this));  
            }  
            return this._actionLists;  
        }  
    }  
       
     
       
     

     

    你为你的控件实现一个类似的 designer  并且在类特性里面调用    应该就可以做出这个三角

     


    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月7日 14:59
  • tssing 说:

    你是怎么反编译的。。。



    Red Gate's .NET Reflector
    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月7日 15:00
  • 果然 顺藤摸瓜 

     

    找到了

    internal class TextBoxActionList : DesignerActionList  
    {  
        // Methods  
        public TextBoxActionList(TextBoxDesigner designer);  
        public override DesignerActionItemCollection GetSortedActionItems();  
     
        // Properties  
        public bool Multiline { getset; }  
    }  
     
       
    Expand Methods  
       
     
    只有一个 mutilline 属性
    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 tssing 2009年2月7日 15:10
    2009年2月7日 15:05
  • 高深高深,还不是很明白。
    • 已标记为答案 tssing 2009年2月7日 15:13
    2009年2月7日 15:11
  • 难得我能帮上你一次  好开心啊


    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 tssing 2009年2月7日 15:13
    2009年2月7日 15:12
  • 我还真没看出来那里可以自定义三角型

    那软件我下载了,很好用。。

    • 已标记为答案 tssing 2009年2月7日 15:51
    2009年2月7日 15:29
  •  public override DesignerActionListCollection ActionLists { get; }

    这个里面返回的 DesignerActionListCollection   会直接在三角形点出来的窗体里面显示出来的

     

     


    Guitar Hero IV -- Singing Rock & Roll.
    • 已标记为答案 tssing 2009年2月7日 15:51
    2009年2月7日 15:33
  • 貌似重写很有用呀。。。。。

    突然楼住太英明了

    这么多满意答案 连自己都有份儿

    • 已标记为答案 tssing 2009年2月8日 2:03
    2009年2月8日 1:31
  • 实际上我还是不明白
    • 已标记为答案 tssing 2009年2月8日 8:40
    2009年2月8日 8:40
  • 得到reflector,是我真正的朋友。太好用了.
    • 已标记为答案 tssing 2009年2月8日 11:18
    2009年2月8日 11:12
    • 已标记为答案 tssing 2009年2月8日 13:13
    2009年2月8日 11:25
    版主
  • 谢谢谢谢谢谢谢谢谢谢谢谢
    太感动了,真心感谢真心感谢。。
    2009年2月8日 13:14