Делегирование более одного обработчика событий [дубликат]

В бесстыдной попытке украсть некоторые голоса SecurityProtocol является Enum с атрибутом [Flags]. Таким образом, вы можете сделать это:

[Net.ServicePointManager]::SecurityProtocol = 
  [Net.SecurityProtocolType]::Tls12 -bor `
  [Net.SecurityProtocolType]::Tls11 -bor `
  [Net.SecurityProtocolType]::Tls

Или, поскольку это PowerShell, вы можете позволить ему разобрать строку для вас:

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"

Тогда вам не требуется технически знаю версию TLS.

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

Заключительное примечание. У меня есть исходный (минус SO редактирует) оператор в моем профиле PowerShell, так что он находится в каждом сеансе, который я запускаю Теперь. Это не совсем безопасно, так как все еще есть некоторые сайты, которые просто терпят неудачу, но я уверен, что сообщение, о котором идет речь, реже.

11
задан ashish_pal 6 February 2013 в 16:20
поделиться

2 ответа

Это по дизайну. Событие MouseDown захватывает мышь, свойство Control.Capture. Встроенный обработчик событий MouseUp проверяет, все ли мышь захвачена, а мышь не зашла слишком далеко, а затем запускает событие Click. Проблема заключается в том, что вызов DoDragDrop () отменяет захват мыши. Обязательно, так как мышиные события теперь используются для реализации операции drag + drop. Таким образом, вы никогда не получите событие Click или DoubleClick.

Элементы управления, которые должны отвечать кликам и drag + drop, являются проблемой удобства использования. Однако это исправление, что вам нужно сделать, чтобы убедиться, что пользователь достаточно переместил мышь из исходного местоположения мыши, , затем запустил перетаскивание. Сделайте свой код таким:

Private MouseDownPos As Point

Private Sub Dir1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dir1.MouseDown
    MouseDownPos = e.Location
End Sub

Private Sub Dir1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Dir1.MouseMove
    If e.Button And MouseButtons.Left = MouseButtons.Left Then
        Dim dx = e.X - MouseDownPos.X
        Dim dy = e.Y - MouseDownPos.Y
        If Math.Abs(dx) >= SystemInformation.DoubleClickSize.Width OrElse _
           Math.Abs(dy) >= SystemInformation.DoubleClickSize.Height Then
            '' Start the drag here
            ''...
        End If
    End If
End Sub
23
ответ дан Hans Passant 27 August 2018 в 18:41
поделиться

для тех, кому нужна версия c # с перетаскиванием

    private Point MouseDownPos;
    private void dataGridView1_MouseDown(System.Object sender, System.Windows.Forms.MouseEventArgs e)
    {
        MouseDownPos = e.Location;
    }

    private void dataGridView1_MouseMove(System.Object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            dynamic dx = e.X - MouseDownPos.X;
            dynamic dy = e.Y - MouseDownPos.Y;
            if (Math.Abs(dx) >= SystemInformation.DoubleClickSize.Width || Math.Abs(dy) >= SystemInformation.DoubleClickSize.Height)
            {
                DataGridView.HitTestInfo info = dataGridView1.HitTest(e.X, e.Y);
                if (info.RowIndex >= 0)
                {
                    DataRowView view = (DataRowView)
                           dataGridView1.Rows[info.RowIndex].DataBoundItem;

                    if (view != null)
                        dataGridView1.DoDragDrop(view, DragDropEffects.Move);

                }
            }
        }
    }
1
ответ дан Sayisal Ofis 27 August 2018 в 18:41
поделиться
Другие вопросы по тегам:

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