C#WinForms将名称添加到矩形?

问题描述:

所以,我正在构建一个有118个点击按钮的小应用程序。这是一架飞机的座位选择器。我添加了一个图像,并添加了118个矩形,而不是添加118个按钮,使它们正确定位。C#WinForms将名称添加到矩形?

当用户点击一个矩形,我似乎无法找到一种方法来确定哪个座位被点击......有没有办法将名称字段添加到Rectangle类或任何其他方式来解决这个问题?

+0

是长方形一个WinForms控制是一个自定义的控制?每个矩形都有一个唯一的名字吗? – arb

+0

我实际上将它们命名为seatA1,seatC2等。我还可以找到用户点击的位置,但由于Rectangle类中没有此类属性,所以我无法返回座位的名称。 – henriquesirot

+0

我想要做的是重写Rectangle类以插入Name属性,就这些! – henriquesirot

矩形结构是密封的,所以你不能继承它。

但你可以尝试只是让自己的类:

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

由于飞机可以更改并且座位数量不同,因此只需使用标签或按钮即可使程序更通用。 012标签或按钮实际上并不那么多,并且其功能类似于在Paint事件中的图像或面板上绘制文本。

但是,对于您的特定问题,您应该获取MouseDown事件并使用X和Y坐标来了解用户单击的位置。

有点脏,但你可以使用Cursor.X和Cursor.Y来获得鼠标点击位置。如果它要全屏运行,你可以检查矩形的位置。