c# WinForms为矩形添加名称

本文关键字:添加 WinForms | 更新日期: 2023-09-27 18:13:35

我正在构建一个小应用程序,它有118个按钮可供点击。它是飞机的选座器。我没有添加118个按钮,而是添加了一个图像,并在其上包含118个矩形,并正确地定位它们。

当用户点击一个矩形时,我似乎找不到一种方法来识别哪个座位被点击了…是否有办法添加一个名称字段到矩形类或任何其他方法来解决这个问题?

c# WinForms为矩形添加名称

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

但是你可以试着创建你自己的类:

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);
    }
  }
}

由于飞机可以改变并且有不同数量的座位,因此您可以仅使用标签或按钮使程序更通用。200个标签或按钮在现实中并没有那么多,它的工作性能类似于在Paint事件中在图像或面板上绘制文本。

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

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