2014-04-27 55 views
0

我真的很難找到合適的資源,因此StackOverflow上的某個人可能會知道這一點。我在Windows窗體應用程序中擴展了一個PictureBox控件,我在過去完成了同樣的事情,但不幸的是,我不記得我是如何按照我想要的方式工作的。訪問擴展控件的自定義屬性

我的控制代碼是:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace SomeApplication 
{ 
    public class Picture : PictureBox 
    { 
     public static Bitmap Thumbnail { get; set; } 
     public static Bitmap OriginalPhoto { get; set; } 
     public static string Name { get; set; } 
     public static Int64 Order { get; set; } 
    } 
} 

我[在過去所做的那樣,和]想現在要做的就是訪問這些屬性,一旦我已經創建了一個圖片控件,並將其添加到窗體。

private void Main_Load(object sender, EventArgs e) 
{ 
    this.Controls.Add(new Picture() { Order = 7, Location = new Point(0, 0) }); 
} 

但這並不奏效。我無法從picture1訪問任何這些自定義屬性。我只能從實際本身訪問它們,就像這樣:

Picture.Order = 8; 

這是無用的。

我該如何做到這一點?

回答

0

您應該從屬性定義中刪除static。這會導致屬性在類而不是實例上。

public class Picture : PictureBox 
{ 
    public Bitmap Thumbnail { get; set; } 
    public Bitmap OriginalPhoto { get; set; } 
    public string Name { get; set; } 
    public Int64 Order { get; set; } 
} 
+0

謝謝帕特里克。 –

0

問題:你宣佈你的屬性staic。靜態的memeners屬於類級別,但不是實例級別,因此您無法從主體初始化程序初始化它們。

解決方案:您需要通過刪除屬性的static關鍵字infront來使你的屬性non-static

試試這個:

public Bitmap Thumbnail { get; set; } 
public Bitmap OriginalPhoto { get; set; } 
public string Name { get; set; } 
public Int64 Order { get; set; } 
+0

再次感謝您的幫助@Sudhakar。當我有足夠的聲望這樣做時,我會爲你的答案投票。儘管如此,我認爲我應該接受帕特里克的回答,因爲除了他根據S.O首先提供的答案外,兩個答案都是一樣的。 –

+0

@ spike.y:歡迎你:)很高興幫助你, –