выбор меток времени выполнения

Пишу программу печати пластиковых карт на VB.NET. Основная форма - оформление карты.

Я создаю ярлыки во время выполнения в элементе управления Panel, пользователь может перемещать, редактировать, изменять размер и т. Д., Пока он является активным элементом управления. Когда создано несколько ярлыков, я не могу изменить выбранный ярлык для редактирования.

Я попытался добавить поле со списком со списком элементов управления по мере их создания и использовать цикл for, чтобы найти элемент управления и сделать его активным, но это не совсем удобно для пользователя.

Есть ли более умный способ использовать мышь для выбора другой метки на панели?

Спасибо, Брюс


person Brix    schedule 09.10.2012    source источник
comment
Можете ли вы использовать событие MouseUp?   -  person SSS    schedule 09.10.2012
comment
нет, обработчика событий нет, поскольку метка создается во время выполнения. Как только он выбран или находится в фокусе, все работает.   -  person Brix    schedule 10.10.2012
comment
Вы можете легко создавать обработчики событий во время выполнения. Просто используйте AddHandler.   -  person Enigmativity    schedule 10.10.2012


Ответы (2)


Добавьте панель в форму и попробуйте следующее:

Public Class Form1

  Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    For i As Integer = 0 To 4
      Dim lbl As New Label
      AddHandler lbl.Click, AddressOf lbl_Click
      Panel1.Controls.Add(lbl)
      lbl.Top = 30 * i
      lbl.Text = "Hello!"
    Next
  End Sub

  Private Sub lbl_Click(sender As System.Object, e As System.EventArgs)
    Dim lbl As Label = DirectCast(sender, Label)
    lbl.Font = New Font(System.Drawing.FontFamily.GenericMonospace, 12)
  End Sub
End Class

Щелчок по метке должен изменить внешний вид метки.

person SSS    schedule 10.10.2012

Мне нравится ответ SSS, но я бы не стал создавать обработчик событий Private Sub и вместо этого использовал бы встроенную лямбду:

For i As Integer = 0 To 4
  Dim lbl As New Label
  AddHandler lbl.Click,
    Sub (s, e)
        lbl.Font = New Font(FontFamily.GenericMonospace, 12)
    End Sub
  Panel1.Controls.Add(lbl)
  lbl.Top = 30 * i
  lbl.Text = "Hello!"
Next
person Enigmativity    schedule 10.10.2012
comment
Я скопировал ваш код, никогда не слышал о лямбде, он вызывает синтаксические ошибки, думает, что это подпрограмма, и я использую 2008 год. - person Brix; 10.10.2012
comment
это не сработало. Я никогда не использовал их раньше, поэтому я мог что-то упустить. - person Brix; 10.10.2012
comment
@Brix - Это не сработает в 2008 году. Вам нужен 2012 год. Извините. Я проверил код перед тем, как опубликовать его. Sub (s, e) работает в .NET 4.0. - person Enigmativity; 10.10.2012