Как я говорю, закончилось ли Отбрасывание Перетаскивания в Winforms?

readLine () возвращает необязательную строку. Чтобы развернуть опционально, в swift есть пара опций, я думаю, там есть три опции. Один - принудительное развертывание, второй - необязательная цепочка, а третий - оператором guard . Здесь, в приведенной ниже опции, я использовал необязательную цепочку, чтобы развернуть необязательную строку, возвращаемую redLine () . Попробуйте это:

if let typed = readLine() {
    if let num = Int(typed) {
        if  num %  2 ==  0 {
            print("This number is even.")
        }
        else  {
            print("This number is odd.")
         }
       }
     } else {
    print("Please enter a valid number")
}
8
задан Community 23 May 2017 в 11:58
поделиться

1 ответ

Я не получил берущих и в конечном счете понял это.

Ответ должен следить за развитием события QueryContinueDrag. Это событие стреляет постоянно во время операции отбрасывания перетаскивания. QueryContinueDragEventArgs содержат свойство Action перечисления типа DragAction, который является любой DragAction. Отмена, DragAction. Отбрасывание или DragAction. Продолжить. Это - свойство чтения/записи, чтобы позволить Вам изменять стандартное поведение (нам не нужно это).

Этот пример кода предполагает, что флаг DragDropInProgress установлен в начале отбрасывания перетаскивания и сброшен, когда отбрасывание перетаскивания завершается успешно. Это ловит окончание DragDrop, потому что пользователь отпустил мыши, не будучи по цели отбрасывания перетаскивания (цели отбрасывания перетаскивания являются MyControl1 и MyControl2), или отменяет отбрасывание перетаскивания. Если Вы не заботитесь, сбрасывается ли DragDropInProgressFlag перед Вашими огнями событий DragDrop можно обойтись без теста хита и просто сбросить флаг.

Private Sub MyControl_QueryContinueDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.QueryContinueDragEventArgs) Handles MyControl.QueryContinueDrag

    Dim MousePointerLocation As Point = MousePosition

    If e.Action = DragAction.Cancel Then '' User pressed the Escape button
        DragDropInProgressFlag = False
    End If

    If e.Action = DragAction.Drop Then
        If Not HitTest(new {MyControl1, MyControl2}, MousePointerLocation) Then
            DragDropInProgressFlag = False
        End If
    End If

End Sub

Private Function HitTest(ByVal ctls() As Control, ByVal p As Point) As Boolean

    HitTest = False

    For Each ctl In ctls
        Dim ClientPoint As Point = ctl.PointToClient(p)
        HitTest = HitTest Or (ClientPoint.X >= 0 AndAlso ClientPoint.Y >= 0 AndAlso ClientPoint.X <= ctl.Width AndAlso ClientPoint.Y <= ctl.Height)
        If HitTest Then Exit For
    Next

End Function

В этом примере HitTest является rountine, который берет Положение мыши (экранная координата) и массив средств управления и отсеивает через массив, передающий Верный, если положение мыши находится в каком-либо из прямоугольников средств управления.

18
ответ дан 5 December 2019 в 09:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: