none
請教如何讓自訂元件在設計模式下改變Enabled屬性時, 馬上就可以看出效果? RRS feed

  • 問題

  • 像是系統的 TextBox 或 Button... 等元件
    在設計模式下設 Enabled=false
    外觀是不會改變的
    只有執行的時候才會看的出反灰的效果

    然後我繼承這些元件自訂
    覆載OnEnabledChanged事件如下:

    protected override void OnEnabledChanged(EventArgs e)
    {
        base.OnEnabledChanged(e);
        Invalidate();
    }

    覆載OnPaintBackground如下:

    protected override void OnPaintBackground(PaintEventArgs pevent)
    {
        base.OnPaintBackground(pevent);
    
        if (!Enabled)
            pevent.Graphics.Clear(Color.Yellow);
        else
            pevent.Graphics.Clear(Color.Blue);
    }

    但在設計模式下
    無論怎麼改變 Enabled 屬性
    還是一樣不會有任何效果出來

    請問是不是還要開啟什麼屬性呢?

    ps. 執行時後是有效果的喔...



    2009年11月11日 上午 06:55

所有回覆

  • Hi,
    試著造個屬性
    在該屬性的Set區塊中
    叫用你寫的方法試試

    Like this
        public partial class cTextBox : TextBox
        {
            public Boolean Enable
            {
                get {return Enabled; }
                set { Enabled = value; }
            }
    
            protected override void OnEnabledChanged(EventArgs e)
            {
                if (Enabled)
                {
                    this.SetStyle(ControlStyles.UserPaint, false);
                    this.Font = new System.Drawing.Font(Font.FontFamily, Font.Size, Font.Style, Font.Unit);
                }
                else
                {
                    this.SetStyle(ControlStyles.UserPaint, true);
                }
            }
    
            protected override void OnPaint(PaintEventArgs args)
            {
                base.OnPaint(args);
                args.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), new PointF(0.0F, 0.0F));
            }
        }


    剛試了一下Enabled的屬性在設計界面中好像無法觸發效果
    但其它屬性卻可以正常運作

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年11月11日 上午 11:55
  • Hi,
    試著造個屬性
    在該屬性的Set區塊中
    叫用你寫的方法試試

    Like this
        public partial class cTextBox : TextBox
        {
            ...
        }
    


    剛試了一下Enabled的屬性在設計界面中好像無法觸發效果
    但其它屬性卻可以正常運作

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/

    這個方法我曾經嘗試過了
    就跟你說的一樣
    只有Enabled屬性無法觸發效果
    其他的屬性都會 一一"

    所以才來發問這帖
    應該有什麼隱藏的屬性可以讓我打開來後
    就可以使用的吧@@
    2009年11月11日 下午 04:28
  • Hi,

    基本上
    我看了上篇你的問題
    你的問題比較像是要用Readonly
    不太像是要用Enabled

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年11月12日 上午 12:57
  • 其實是因為系統幾乎快完成了
    user才提出這樣的問題
    有上千個textbox已經設了enabled為false
    或是在程式中會去變動到enabled的值
    如果要下去改成readonly會是個大工程

    所以才做了這樣的元件出來
    只是現在這個問題出於我自己的好奇心
    因為做出來的元件在設計模式下竟然無法預覽
    感覺還蠻不爽的:P
    2009年11月12日 上午 01:50
  • HI,

    .NET內建的TextBox將Enabled屬性設定成False也是只有在執行時期才能看到效果, 而且TextBox的Enabled屬性也不能override, 所以對Enabled屬性而言, 可能無法達到您要的效果.
    2009年11月12日 上午 02:14