【问题标题】:Show component with changed property in design (not default)在设计中显示具有更改属性的组件(非默认)
【发布时间】:2012-02-08 14:19:40
【问题描述】:

我的组件有点问题。这看起来像我的财产:

private ViewType _viewType = ViewType.Week;
        public ViewType DisplayType
        {
            get { return _viewType; }
            set
            {
                _viewType = value;
                if (panelKalendar != null)
                    panelKalendar.Invalidate();
            }
        }

我在 Kalendar_Load() 中有这个:

...
if (this._viewType == ViewType.Month)
                panelKalendar.Top = yPoloha;
            else if (this._viewType == ViewType.Week)
                panelKalendar.Top = yPoloha + VYSKA_BUNKY;
...

(视图类型类)

public enum ViewType
        {
            Week,
            Month,
        }

当我将我的组件添加到应用程序时,它看起来很好。我有默认周,我的组件在设计中带有周外观。但是当我将它更改为 Month 时,在 Design 中它显示不好,如果在 kalendar_load (panelKalendar.Top = yPoloha + VYSKA_BUNKY) 中它会获得第二个。当我建立它时,它是好的。这就是问题所在。为什么设计师使用默认属性而不是设置的属性?谢谢

【问题讨论】:

    标签: c# winforms visual-studio-2008 custom-component


    【解决方案1】:

    当组件在设计器中时,不会调用 Load。属性和构造函数中的代码是。如果要更改 viewType 属性以导致设计器发生更改,则需要在设置属性时使用代码。而不是在加载期间。这在运行时也应该适用于您。

    我会创建一个这样的方法:

    private void UpdateViewType()
    {
     if (this._viewType == ViewType.Month)
                        panelKalendar.Top = yPoloha;
                    else if (this._viewType == ViewType.Week)
                        panelKalendar.Top = yPoloha + VYSKA_BUNKY; 
    }
    

    然后在属性中设置值的时候调用它

    ... 
     set
       {
         _viewType = value;
         UpdateViewType()
         if (panelKalendar != null)
             panelKalendar.Invalidate();
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-19
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2010-10-07
      相关资源
      最近更新 更多