所以,我正在構建一個有118個點擊按鈕的小應用程序。這是一架飛機的座位選擇器。我添加了一個圖像,並添加了118個矩形,而不是添加118個按鈕,使它們正確定位。C#WinForms將名稱添加到矩形?
當用戶點擊一個矩形,我似乎無法找到一種方法來確定哪個座位被點擊......有沒有辦法將名稱字段添加到Rectangle類或任何其他方式來解決這個問題?
所以,我正在構建一個有118個點擊按鈕的小應用程序。這是一架飛機的座位選擇器。我添加了一個圖像,並添加了118個矩形,而不是添加118個按鈕,使它們正確定位。C#WinForms將名稱添加到矩形?
當用戶點擊一個矩形,我似乎無法找到一種方法來確定哪個座位被點擊......有沒有辦法將名稱字段添加到Rectangle類或任何其他方式來解決這個問題?
矩形結構是密封的,所以你不能繼承它。
但你可以嘗試只是讓自己的類:
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);
}
}
}
不知道它被封了......謝謝! – henriquesirot
稍微挑剔;但'System.Drawing.Rectangle'是一個結構,而不是一個類。因此,結構並不是密封的;你[只是不能從一個結構體繼承](http://msdn.microsoft.com/en-us/library/ah19swz4.aspx)。 – vcsjones
@vcsjones非常好的一點,並予以糾正。我傾向於將所有事情都視爲一個階級 - 這是我的錘子。 – LarsTech
由於飛機可以更改並且座位數量不同,因此只需使用標籤或按鈕即可使程序更通用。 012標籤或按鈕實際上並不那麼多,並且其功能類似於在Paint事件中的圖像或面板上繪製文本。
但是,對於您的特定問題,您應該獲取MouseDown事件並使用X和Y座標來了解用戶單擊的位置。
有點髒,但你可以使用Cursor.X和Cursor.Y來獲得鼠標點擊位置。如果它要全屏運行,你可以檢查矩形的位置。
是長方形一個WinForms控制是一個自定義的控制?每個矩形都有一個唯一的名字嗎? – arb
我實際上將它們命名爲seatA1,seatC2等。我還可以找到用戶點擊的位置,但由於Rectangle類中沒有此類屬性,所以我無法返回座位的名稱。 – henriquesirot
我想要做的是重寫Rectangle類以插入Name屬性,就這些! – henriquesirot