问题1. 比如属性tailText,我看到好多这么写:
[Bindable(true)]
[Browsable(true)]
[Description("设定结尾文字")]
[Category("Appearance")]
public string tailText
{
   get { return pTailText; }
   set
   {
       pTailText = value;
       this.Invalid();
    }
}
请问Bindable和Browsable都是什么意思?为什么当我在使用自定义控件的程序中的属性栏修改tailText属性时,控件上的tailText文字处不刷新?就像标准控件的label的text属性一样。
我是在控件的paint事件函数里这样写的:
private void aaPaint(object sender, PaintEventArgs e)
{
Graphics fmg = e.Graphics;
if (plotTailText.Length > 0)
         fmg.DrawString(pTitleText, pTitleTextFont, new SolidBrush(Color.Black), (this.Size.Width - (int)tailTextSize.Width) / 2, this.Size.Height - (int)ttailTextSize.Height) / 2);
}问题2. 我的自定义控件上有几个标准控件摆放在一起构成,某些控件的位置和大小会根据另一些控件的属性的变化而变化,变化规则,也就是子控件的位置和大小重定义我是在自定义控件的load函数里写的,在使用自定义控件的程序里,当改变某一个子控件属性时,我发现控件的其他子控件位置大小就不能跟着调整,只有在运行程序时才会调整。请问我怎样才能实现这两个问题的要求?
 

解决方案 »

  1.   

        public override string Text
        {
          get { return base.Text; }
          set { base.Text = value; }
        }    protected override void OnTextChanged(EventArgs e)
        {
          base.OnTextChanged(e);
          this.Invalidate();
        }
      

  2.   

    对不起,我没说清楚,我重新描述一下:
    假如一个自定义控件上有一个panel1,设计时他的location是(5,5) size是(100,100),自定义控件有属性a,它是字符串,a的默认值是空的。
    假如在自定义控件的使用程序中form1,给属性a赋值“abcdefg”,我想要的结果就是,在form1上自定义控件把属性字符串a写到原来panel1的位置上,然后自动调整子控件panel的位置和大小,也就是及时看到自定义控件的样子:例如,属性a的字符串写在自定义控件的(5,5)处,假设a的长度是20,而panel1的location要自动向右挪一块,为(25,5) size也要相应缩短比如(80,100)。当然,如果a没有赋值,自定义控件样子就维持设计时的原始样子。
      

  3.   

    fmg.Clear(Color.White);
    然后再DrawString
      

  4.   

    我觉得你所提的两个问题事实上就是一个问题:在设置完属性值后改变界面的显示。  你可以定义一个方法,在set{}里面先更新变量的值,再调用那个方法,而那个方法则按照变量值来具体控制界面上控件的显示。
      

  5.   

    yjl49,可是这样的话发现控件的load函数进不去了,就是调用控件的那个程序里的控件的load
      

  6.   

    对你这句话的后半部分看得不是很明白,你是说load只加载一次?  如果是这样的话你直接调用它不就行了?
      

  7.   

    [Browsable(true)]  是否在属性栏中显示[Category("Appearance")]  属性栏中分类   如布局,操作,键......不设置就是"杂项".....就是添加一些注释和分类,方便查看,开发...