C # WinForms добавить имя для прямоугольников? - PullRequest
0 голосов
/ 06 ноября 2011

Итак, я создаю небольшое приложение, в котором есть 118 кнопок для нажатия. Это выбор места для самолета. Вместо добавления 118 кнопок я добавил изображение и добавил на него 118 прямоугольников, располагая их правильно.

Когда пользователь щелкает прямоугольник, я не могу найти способ определить, какое место щелкнуло ... Есть ли способ добавить поле имени в класс Rectangle или любой другой способ решить эту проблему? 1003 *

Ответы [ 3 ]

1 голос
/ 06 ноября 2011

Немного грязно, но вы можете использовать Cursor.X и Cursor.Y, чтобы получить местоположение щелчка мыши. Если он будет работать в полноэкранном режиме, вы можете проверить расположение прямоугольников.

1 голос
/ 06 ноября 2011

Структура 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);
    }
  }
}
1 голос
/ 06 ноября 2011

Поскольку самолеты могут меняться и иметь разное количество посадочных мест, вы можете сделать свою программу более универсальной, используя только метки или кнопки. 200 ярлыков или кнопок на самом деле не так уж много, и они работают с представлениями, подобными рисованию текста на изображении или на панели в событии Paint.

Однако для вашей конкретной проблемы вы должны получить событие MouseDown и использовать координаты X и Y, чтобы понять, где пользователь щелкнул.

...