2011-09-09 99 views
1

如何覆蓋PictureBox的Width屬性? (我需要設置base.Width,但額外的執行方法)C#:PictureBox覆蓋寬度

以下是不工作:

public class l33tProgressBar : PictureBox 
{ 
    public override int Width 
    { 
     get { return this.Width; } 
     set 
     { 
      myMethod(); 

      base.Width = value; 
     } 
    } 
} 

回答

1

Width不是虛擬的,所以你不能覆蓋它。但是,您可以使用new關鍵字覆蓋它。

public new int Width 
{ 
    get { return base.Width; } 
    set 
    { 
     myMethod(); 

     base.Width = value; 
    } 
} 

然而,一個更好的選擇可能是覆蓋SizeChangeddocs事件處理程序,而不是

public override void OnSizeChanged(EventArgs e) 
{ 
    // Width or Height has been changed 
    base.OnSizeChanged(e); // Essential, or event will not be raised! 
} 
+0

THX了很多,這個工程很大: '代碼' 保護覆蓋無效OnSizeChanged(EventArgs的五){ // 寬度或高度已經改變 base.OnSizeChanged(E); //必不可少,或者事件不會升起! } – nr1

1

創建方法,它可能會更乾淨。隱藏一個方法調用別人希望是一個繼承的屬性是不可讀或可維護的方法。

public class l33tProgressBar : PictureBox 
{ 
    public void SetWidthMyWay(int width) 
    { 
     myMethod(); 
     this.Width = width; 
    } 
}