2011-11-06 166 views
0

所以,我正在構建一個有118個點擊按鈕的小應用程序。這是一架飛機的座位選擇器。我添加了一個圖像,並添加了118個矩形,而不是添加118個按鈕,使它們正確定位。C#WinForms將名稱添加到矩形?

當用戶點擊一個矩形,我似乎無法找到一種方法來確定哪個座位被點擊......有沒有辦法將名稱字段添加到Rectangle類或任何其他方式來解決這個問題?

+0

是長方形一個WinForms控制是一個自定義的控制?每個矩形都有一個唯一的名字嗎? – arb

+0

我實際上將它們命名爲seatA1,seatC2等。我還可以找到用戶點擊的位置,但由於Rectangle類中沒有此類屬性,所以我無法返回座位的名稱。 – henriquesirot

+0

我想要做的是重寫Rectangle類以插入Name屬性,就這些! – henriquesirot

回答

1

矩形結構是密封的,所以你不能繼承它。

但你可以嘗試只是讓自己的類:

public class Seat { 
    private string _SeatKey; 
    private Rectangle _SeatRectangle; 

    public Seat(string seatKey, Rectangle seatRectangle) { 
    _SeatKey = seatKey; 
    _SeatRectangle = seatRectangle; 
    } 

    public string SeatKey { 
    get { return _SeatKey; } 
    } 

    public Rectangle SeatRectangle { 
    get { return _SeatRectangle; } 
    set { _SeatRectangle = value; } 
    } 
} 

例子:

private List<Seat> _Seats = new List<Seat>(); 

public Form1() { 
    InitializeComponent(); 

    _Seats.Add(new Seat("1a", new Rectangle(10, 10, 10, 10))); 
    _Seats.Add(new Seat("2b", new Rectangle(20, 20, 10, 10))); 
} 

private void Form1_Paint(object sender, PaintEventArgs e) { 
    foreach (Seat seat in _Seats) 
    e.Graphics.FillRectangle(Brushes.Red, seat.SeatRectangle); 
} 

private void Form1_MouseDown(object sender, MouseEventArgs e) { 
    if (e.Button == MouseButtons.Left) { 
    foreach (Seat seat in _Seats) { 
     if (seat.SeatRectangle.Contains(e.Location)) 
     MessageBox.Show("Clicked on seat " + seat.SeatKey); 
    } 
    } 
} 
+0

不知道它被封了......謝謝! – henriquesirot

+2

稍微挑剔;但'System.Drawing.Rectangle'是一個結構,而不是一個類。因此,結構並不是密封的;你[只是不能從一個結構體繼承](http://msdn.microsoft.com/en-us/library/ah19swz4.aspx)。 – vcsjones

+0

@vcsjones非常好的一點,並予以糾正。我傾向於將所有事情都視爲一個階級 - 這是我的錘子。 – LarsTech

1

由於飛機可以更改並且座位數量不同,因此只需使用標籤或按鈕即可使程序更通用。 012標籤或按鈕實際上並不那麼多,並且其功能類似於在Paint事件中的圖像或面板上繪製文本。

但是,對於您的特定問題,您應該獲取MouseDown事件並使用X和Y座標來了解用戶單擊的位置。

1

有點髒,但你可以使用Cursor.X和Cursor.Y來獲得鼠標點擊位置。如果它要全屏運行,你可以檢查矩形的位置。