none
继承控件 设置后 无法设置 回原来的属 RRS feed

  • 问题

  • class Bt:Button
    {
       private void InitializeComponent()
       {
          BackColor=Color.Red;
       }
    }
    默认BackColor=Color.Control

    1继承控件,,
    2"视图设计器(D)"修改初始值

    3winform调用
    4设置回初始值,,,编译,,除了初始值之外,,其它都能设置..

    下载
    http://files.cnblogs.com/tssing/CustomControlSetProperties.rar

    如果你们能把BaudRate属性设回9600就算成功,,
    任何值都能设下去,,就是原来的9600不行。。。

    记得设置完后,要编译。。。

    谢谢大家的关心
    • 已移动 Sheng Jiang 蒋晟Moderator 2009年5月16日 15:24 Windows表单设计器问题 ([Loc]From:Visual C#)
    • 已编辑 tssing 2009年5月17日 12:46
    • 已更改类型 YiChun Chen 2009年5月22日 3:25 Do not follow up
    • 已更改类型 YiChun Chen 2009年5月25日 3:09 反馈
    2009年5月16日 11:31

答案

全部回复

  • 你好!
         请问可以提供完整的代码吗?
    周雪峰
    2009年5月16日 12:54
    版主
  • 你好!
         请问可以提供完整的代码吗?
    周雪峰

    继承一个控件后,如果在InitializeComponent()修改其属性,就无法回复原来的值,但是其它值都可以,,

    如果属性没修改的话,任何值都能设置.......
    2009年5月16日 12:58
  • using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace X.WinFormsControl
    {
        public partial class XButton200905162109 : Button
        {
            public XButton200905162109()
            {
                this.InitClass();
            }
    
            private void InitClass()
            {
                this.BackColor = Color.Red;
            }
    
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }
        }
    }
    
    
    删除自定义控件的 Desinger 文件, 初始值的代码设到构造函数里面
    知识改变命运,奋斗成就人生!
    2009年5月16日 13:18
    版主
  • 但是Color没有Control属性,应该这样:
    BackColor = System.Drawing.SystemColors.Control;
    不知道你是不是这个意思!

    周雪峰
    2009年5月16日 13:25
    版主
  • using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace X.WinFormsControl
    {
        public partial class XButton200905162109 : Button
        {
            public XButton200905162109()
            {
                this.InitClass();
            }
    
            private void InitClass()
            {
                this.BackColor = Color.Red;
            }
    
            protected override void OnPaint(PaintEventArgs pe)
            {
                base.OnPaint(pe);
            }
        }
    }
    
    
    删除自定义控件的 Desinger 文件, 初始值的代码设到构造函数里面
    知识改变命运,奋斗成就人生!
    谢谢,,但是有个小小的问题,,如果删除desinger,,net就无法调用此控件...
    2009年5月16日 15:01
  • 如果你的目的已达成,可以不用删除,不过做扩展控件的时候,一般都不用 Desinger ,只需要一个类文件继承指定的控件就行了
    知识改变命运,奋斗成就人生!
    2009年5月16日 15:04
    版主
  • 如果你的目的已达成,可以不用删除,不过做扩展控件的时候,一般都不用 Desinger ,只需要一个类文件继承指定的控件就行了
    知识改变命运,奋斗成就人生!

    不是desinger的问题,,刚刚试过两种效果都一样...
    2009年5月16日 15:08
  • 如果问题没有解决,可以把你的控件代码及调用贴出来
    知识改变命运,奋斗成就人生!
    2009年5月16日 15:10
    版主
  • 如果问题没有解决,可以把你的控件代码及调用贴出来
    知识改变命运,奋斗成就人生!

    没代码的说,,就是继承一个控件,,
    然后在"视图设计器(D)"里面编辑后就这样了
    任何值都可以设置,,控件原值设不下去...
    • 已编辑 tssing 2009年5月16日 15:13
    2009年5月16日 15:13
  • 设置一个初始值,调试-窗体显示后,button 颜色不是初始值, 问题是这样吗??
    知识改变命运,奋斗成就人生!
    2009年5月16日 15:17
    版主
  • 设置一个初始值,调试-窗体显示后,button 颜色不是初始值, 问题是这样吗??
    知识改变命运,奋斗成就人生!

    无法设置回初始值...其它值都可能...比如backcolor设置回control的颜色...完全不可以...
    谢谢
    2009年5月16日 15:19
  • 的确没有发现你所说的问题,你是不是想问题,如果设成系统的 Control 颜色,,如果是可以这样设置
    this.Button1.BackColor = SystemColors.Control;

    知识改变命运,奋斗成就人生!
    2009年5月16日 15:30
    版主
  • 的确没有发现你所说的问题,你是不是想问题,如果设成系统的 Control 颜色,,如果是可以这样设置
    this.Button1.BackColor = SystemColors.Control;

    知识改变命运,奋斗成就人生!

    对,你的是写代码的,如果是点击属性,完全不可能设置成control颜色,,但是任何颜色都行,,,

    如果要设成control颜色,就是继承时,,不要去"视图设计器(D)"里面编辑
    2009年5月16日 15:32
  • 属性同样也可以!不知道你是怎么设置属性的
    知识改变命运,奋斗成就人生!
    2009年5月16日 15:34
    版主
  • 属性同样也可以!不知道你是怎么设置属性的
    知识改变命运,奋斗成就人生!

    如果你设置后,再按上f6,,就会发现....是不行的
    2009年5月16日 15:37
  • f5 还是 f6?
    知识改变命运,奋斗成就人生!
    2009年5月16日 15:39
    版主
  • f5 还是 f6?
    知识改变命运,奋斗成就人生!

    编译后,再去看看属性,自动变回"视图设计器(D)"里,自己设置的值....

    任何值都能设置,,就是初始的不行,,,这问题太严重了...
    2009年5月16日 15:41
  • 的确不存在你说的问题,可能是你代码其它地方产生的问题,比如属性本地化设置了 false
    知识改变命运,奋斗成就人生!
    2009年5月16日 15:44
    版主
  • 的确不存在你说的问题,可能是你代码其它地方产生的问题,比如属性本地化设置了 false
    知识改变命运,奋斗成就人生!

    谢谢了,,没事,,我再找找问题,,,我没写代码的说,,
    1继承控件,,
    2"视图设计器(D)"修改初始值

    3winform调用
    4设置回初始值,,,编译,,除了初始值之外,,其它都能设置..
    2009年5月16日 15:50
  • 的确不存在你说的问题,可能是你代码其它地方产生的问题,比如属性本地化设置了 false
    知识改变命运,奋斗成就人生!

    谢谢了,,没事,,我再找找问题,,,我没写代码的说,,
    1继承控件,,
    2"视图设计器(D)"修改初始值

    3winform调用
    4设置回初始值,,,编译,,除了初始值之外,,其它都能设置..

    按我理解,,这样是正确的,,因为编译过后,,就会去调用构造函数,,而构造函数调用InitializeComponent()
    我明白了,,谢谢,,
    2009年5月16日 15:53
  • 嗯,不错,解决了就OK
    知识改变命运,奋斗成就人生!
    2009年5月16日 15:54
    版主
  • 嗯,不错,解决了就OK
    知识改变命运,奋斗成就人生!

    我的思路是这样的,,当拖控件时,,只运行一次构造函数的InitializeComponent()
    之后编译就不理他了,,


    但是我实现不了,,,谢谢,,好像真难的说
    • 已编辑 tssing 2009年5月16日 16:01
    2009年5月16日 15:57
  • 我大概知道,为什么我这边正确,你那不正常了, 原因是因为你写的自定控件调用了 InitializeComponent 你在设计器中设置的初值的代码实际是在产生在 InitializeComponent  中的
    知识改变命运,奋斗成就人生!
    2009年5月16日 15:59
    版主
  • 嗯,就是这个意思,如果你再调用,那 BackColor 一定是InitializeComponent设置的那个颜色
    知识改变命运,奋斗成就人生!
    2009年5月16日 16:00
    版主
  • 嗯,就是这个意思,如果你再调用,那 BackColor 一定是InitializeComponent设置的那个颜色
    知识改变命运,奋斗成就人生!

    我的思路是这样的,,当拖控件时,,只运行一次构造函数的InitializeComponent()
    之后编译就不理他了,,


    但是我实现不了,,,谢谢,,好像真难的说
    2009年5月16日 16:03
  • 这很简单,为什么实现不了
    知识改变命运,奋斗成就人生!
    2009年5月16日 16:04
    版主
  • 嗯,就是这个意思,如果你再调用,那 BackColor 一定是InitializeComponent设置的那个颜色
    知识改变命运,奋斗成就人生!

    我的思路是这样的,,当拖控件时,,只运行一次构造函数的InitializeComponent()
    之后编译就不理他了,,


    但是我实现不了,,,谢谢,,好像真难的说

    但是为什么其它值都可以,,初始值不行...想不通,,想不通
    2009年5月16日 16:07
  • 这很简单,为什么实现不了
    知识改变命运,奋斗成就人生!

    能否给点思路,,
    2009年5月16日 16:10
  • 删除 InitializeComponent 方法,不要用设计器设,在构造函数里设初始值,这样控件拖到界面上就有你自定的颜色了,并且什么颜色都可以修改。
    知识改变命运,奋斗成就人生!
    2009年5月16日 16:12
    版主
  • 删除 InitializeComponent 方法,不要用设计器设,在构造函数里设初始值,这样控件拖到界面上就有你自定的颜色了,并且什么颜色都可以修改。
    知识改变命运,奋斗成就人生!

    不行,,绝对要用设计器,,必需给个我给的初始值...
    2009年5月16日 16:13
  • 好了,这是这简单问题,我的方法也是可行的,你按我刚才所说实际动手具体做一下,周未愉快!
    知识改变命运,奋斗成就人生!
    2009年5月16日 16:23
    版主
  • 好了,这是这简单问题,我的方法也是可行的,你按我刚才所说实际动手具体做一下,周未愉快!
    知识改变命运,奋斗成就人生!

    谢谢,,周末快乐,,
    实在是不行的说...谢谢

    "删除 InitializeComponent 方法,不要用设计器设,在构造函数里设初始值,这样控件拖到界面上就有你自定的颜色了,并且什么颜色都可以修改。 "
    2009年5月16日 16:27
  • 好了,这是这简单问题,我的方法也是可行的,你按我刚才所说实际动手具体做一下,周未愉快!
    知识改变命运,奋斗成就人生!

    谢谢,,周末快乐,,
    实在是不行的说...谢谢

    "删除 InitializeComponent 方法,不要用设计器设,在构造函数里设初始值,这样控件拖到界面上就有你自定的颜色了,并且什么颜色都可以修改。 "

    谢谢,,会不会很难。。
    2009年5月17日 12:11
  • 我按你说的写了个控件,没有发现你说的问题,用代码或设计器都可以设置为Control颜色啊!
    一直没有明白,你说的问题是如何发生的呢?
    周雪峰
    2009年5月17日 12:38
    版主
  • 我按你说的写了个控件,没有发现你说的问题,用代码或设计器都可以设置为Control颜色啊!
    一直没有明白,你说的问题是如何发生的呢?
    周雪峰

    设置是可以,编译过后就不见了,,
    2009年5月17日 12:39
  • 我按你说的写了个控件,没有发现你说的问题,用代码或设计器都可以设置为Control颜色啊!
    一直没有明白,你说的问题是如何发生的呢?
    周雪峰

    设置是可以,编译过后就不见了,,

    一会我写个代码让下载,,谢谢
    2009年5月17日 12:39
  • 嗯 ~~~
    知识改变命运,奋斗成就人生!
    2009年5月17日 12:40
    版主
  • 嗯 ~~~
    知识改变命运,奋斗成就人生!

    http://files.cnblogs.com/tssing/CustomControlSetProperties.rar

    如果你们能把BaudRate属性设回9600就算成功,,
    任何值都能设下去,,就是原来的9600不行。。。

    记得设置完后,要编译。。。

    谢谢大家的关心
    2009年5月17日 12:46
  • 这个可能是由设计器造的,设置默认值 9600 时,VS 会自动清除 From Designer 中关于 BaudRate 属性的描述。所以当属性窗口重新刷新时你看到 12345 了,你可以按下面的方法,在界面上设置 MyBaudRate

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.Data;
    using System.IO.Ports;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;
    using System.Drawing.Design;
    using System.Drawing;
    using System.IO;
    using System.Text.RegularExpressions;
    namespace CustomControlSetProperties
    {
        public partial class Component1 : SerialPort
        {
            public int MyBaudRate
            {
                get { return this.BaudRate; }
                set { this.BaudRate = value; }
            }
    
            public Component1()
            {
                this.MyBaudRate = 12345;
                InitializeComponent();
            }
    
            public Component1(IContainer container):this()
            {
                container.Add(this);
            }
        }
    }


    知识改变命运,奋斗成就人生!
    2009年5月17日 13:06
    版主
  • 这个可能是由设计器造的,设置默认值 9600 时,VS 会自动清除 From Designer 中关于 BaudRate 属性的描述。所以当属性窗口重新刷新时你看到 12345 了,你可以按下面的方法,在界面上设置 MyBaudRate

    using System;
    
    using System.Collections;
    
    using System.Collections.Generic;
    
    using System.Collections.ObjectModel;
    
    using System.ComponentModel;
    
    using System.ComponentModel.Design;
    
    using System.Data;
    
    using System.IO.Ports;
    
    using System.Linq;
    
    using System.Text;
    
    using System.Threading;
    
    using System.Windows.Forms;
    
    using System.Drawing.Design;
    
    using System.Drawing;
    
    using System.IO;
    
    using System.Text.RegularExpressions;
    
    namespace CustomControlSetProperties
    
    {
    
        public partial class Component1 : SerialPort
    
        {
    
            public int MyBaudRate
    
            {
    
                get { return this.BaudRate; }
    
                set { this.BaudRate = value; }
    
            }
    
    
    
            public Component1()
    
            {
    
                this.MyBaudRate = 12345;
    
                InitializeComponent();
    
            }
    
    
    
            public Component1(IContainer container):this()
    
            {
    
                container.Add(this);
    
            }
    
        }
    
    }


    知识改变命运,奋斗成就人生!

    谢谢,,讨论了半天,,大家终于知道意思了,,很感激。。。

    你的方法完全可以解决,,但是属性满天飞,,会越来越多重复没必要的属性出现。。。
    2009年5月17日 13:17
  • 像这样的问题,用代码设就可以了,没必要为了这样的问题去花费这么多的时间性价比不高
    知识改变命运,奋斗成就人生!
    2009年5月17日 13:20
    版主
  • 像这样的问题,用代码设就可以了,没必要为了这样的问题去花费这么多的时间性价比不高
    知识改变命运,奋斗成就人生!

    谢谢,,

    希望有一天能早日解决此问题,,找遍百度都没发现答案。。
    2009年5月17日 13:23
  • [DefaultValue(12345)]
            public new  int BaudRate
            {
                get
                {
                    return base.BaudRate ;
                }
                set
                {
                    base.BaudRate = value;
                }
            }

    http://feiyun0112.cnblogs.com/
    2009年5月18日 2:13
    版主
  • Tssing,你好!

    由于你没有提供更多的反馈信息,我们会将这个帖子改成“常规讨论”的状态。
    如果你有进一步的反馈或者问题已经解决的话,请告诉我们,我们将会帮助你将此帖改回“问题”的状态。
    谢谢你的理解!
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年5月22日 3:24
  • [DefaultValue(12345)]
    
    
    
            public new  int BaudRate
    
    
    
            {
    
    
    
                get
    
    
    
                {
    
    
    
                    return base.BaudRate ;
    
    
    
                }
    
    
    
                set
    
    
    
                {
    
    
    
                    base.BaudRate = value;
    
    
    
                }
    
    
    
            }
    
    

    http://feiyun0112.cnblogs.com/

    非常感谢,您这个答案我非常满意, 但是目前这个帖被锁掉了,无法标记为正确。。谢谢你
    • 已编辑 tssing 2009年5月23日 9:45
    2009年5月23日 9:35