WPF: одиночное нажатие Кнопки + дважды щелкает по проблеме

В моем приложении пользователь может изменить соединение с базой данных из пользовательского интерфейса. Я использую этот код для быстрой проверки соединения с новыми данными соединения: свойство

    public bool CheckAvailable(string sqlServerName, string login, string password)
    {
        var testConnectionString = GetConnectionString(sqlServerName, login, password);

        if (string.IsNullOrWhiteSpace(testConnectionString))
            return false;

        var result = false;

        try
        {
            var testContext = new EntityContext(testConnectionString);

            result = testContext.Database.Exists();
        }
        catch (Exception ex)
        {
            log.Error(exception);
        }

        return result;
    }


    private string GetConnectionString(string sqlServerName, string login, string password)
    {
        var sqlConnectionString = new SqlConnectionStringBuilder
                                 {
                                     DataSource = sqlServerName,
                                     InitialCatalog = ConfigurationProvider.DatabaseName,
                                     UserID = login,
                                     Password = password,
                                     MultipleActiveResultSets = true,
                                     ConnectTimeout = 2 // in seconds
                                 };

        var efConnectionString = new EntityConnectionStringBuilder
                                 {
                                     Provider = ProviderName,
                                     Metadata = ConnectionMetadata,
                                     ProviderConnectionString = sqlConnectionString.ToString()
                                 };

        return efConnectionString.ConnectionString;
    }

ConnectTimeout типа SqlConnectionStringBuilder очень важно для быстрой проверки молнии. Если вы знаете, что ваша база данных должна быть доступна и должна быстро реагировать, вы можете установить это значение равным 1 (при установленном локальном сервере SQL проверка занимает 100-200 миллисекунд). Не устанавливайте 0, потому что это означает отсутствие ограничений и их следует избегать в строках соединения.

15
задан Noctis 10 November 2014 в 04:35
поделиться

2 ответа

Если установить RoutedEvent e.Handled на true после обработки MouseDoubleClick тогда оно не будет вызывать событие Click второй раз после MouseDoubleClick .

Есть недавнее сообщение , в котором говорится о различном поведении для ] SingleClick и DoubleClick , которые могут быть полезны.

Однако, если вы уверены, что хотите отдельные варианты поведения и хотите / должны заблокировать первый Нажмите , а также второй Щелкните , вы можете использовать DispatcherTimer , как и вы.

private static DispatcherTimer myClickWaitTimer = 
    new DispatcherTimer(
        new TimeSpan(0, 0, 0, 1), 
        DispatcherPriority.Background, 
        mouseWaitTimer_Tick, 
        Dispatcher.CurrentDispatcher);

private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    // Stop the timer from ticking.
    myClickWaitTimer.Stop();

    Trace.WriteLine("Double Click");
    e.Handled = true;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    myClickWaitTimer.Start();
}

private static void mouseWaitTimer_Tick(object sender, EventArgs e)
{
    myClickWaitTimer.Stop();

    // Handle Single Click Actions
    Trace.WriteLine("Single Click");
}
16
ответ дан 1 December 2019 в 03:15
поделиться

Вы можете попробовать следующее:

Button.MouseLeftButtonDown += Button_MouseLeftButtonDown;

private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    e.Handled = true;

    if (e.ClickCount > 1)
    {
        // Do double-click code
    }

    else
    {
        // Do single-click code
    }
}

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

7
ответ дан 1 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

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