C#WinForms将名称添加到矩形?
所以,我正在构建一个有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