none
repeatbutton c# RRS feed

  • Вопрос

  • Доброго времени суток!

    Передо мной стоит задача создания кнопки только с событием Click (никаких mouseUp, mouseDown, touchUp, touchDown), которая в зажатом положении будет записывать в label - 1, а в отжатом - 0.

    Я пытался реализовать это с помощью repeatbutton, но ничего не получилось.

    Пожалуйста помогите мне решить эту проблему.

    12 октября 2015 г. 12:12

Ответы

  • Добрый день.Не очень понятно в чем у вас проблема. Создал WPF приложение. На главной форме написал вот такую разметку:

    <Window x:Class="WpfApplication5.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication5"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <StackPanel>
            <Label x:Name="lbText" Content="0" />
            <RepeatButton Content="Нажми меня!" Click="RepeatButton_Click" />
        </StackPanel>
    </Window>

    Обработчик клика имеет вот такой вид:

    private void RepeatButton_Click(object sender, RoutedEventArgs e)
    {
        int x = int.Parse(lbText.Content.ToString());
        x--;
        lbText.Content = x;
    }

    При запуске, если зажать кнопку, то число в label начинает уменьшаться, если отпустить, то не изменяется.

    Это то что вы хотели?

    • Помечено в качестве ответа Bergaro 17 октября 2015 г. 7:28
    13 октября 2015 г. 6:12
    Отвечающий
  • Мне кажется, что с событиями вы что то путаете. Скорее всего они нормально работают, только называются как нибудь StylusButtonUp. Ну а так, можно реализовать и на Click. Разметка из предыдущего примера, код вот такой:

    DispatcherTimer timer = null;
    
    private void RepeatButton_Click(object sender, RoutedEventArgs e)
    {
        if (timer == null)
        {
            timer = new DispatcherTimer(DispatcherPriority.Normal, this.Dispatcher);
            timer.Interval = new TimeSpan(0, 0, 0, 0, 500);
            timer.Tick += Timer_Tick;
        }
        timer.Stop();
        timer.Start();
        lbText.Content = "1";
    }
    
    private void Timer_Tick(object sender, EventArgs e)
    {
        lbText.Content = "0";
        timer.Stop();
        timer = null;
    }

    • Предложено в качестве ответа AlexFV 13 октября 2015 г. 17:09
    • Помечено в качестве ответа Bergaro 17 октября 2015 г. 7:28
    13 октября 2015 г. 9:38
    Отвечающий

Все ответы

  • А какие проблемы, вытаскивайте кнопку на форму ищите свойство click жмете и делаете что надо. (WPF, WinForm тут отличий нет).
    12 октября 2015 г. 16:40
  • Добрый день.Не очень понятно в чем у вас проблема. Создал WPF приложение. На главной форме написал вот такую разметку:

    <Window x:Class="WpfApplication5.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication5"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <StackPanel>
            <Label x:Name="lbText" Content="0" />
            <RepeatButton Content="Нажми меня!" Click="RepeatButton_Click" />
        </StackPanel>
    </Window>

    Обработчик клика имеет вот такой вид:

    private void RepeatButton_Click(object sender, RoutedEventArgs e)
    {
        int x = int.Parse(lbText.Content.ToString());
        x--;
        lbText.Content = x;
    }

    При запуске, если зажать кнопку, то число в label начинает уменьшаться, если отпустить, то не изменяется.

    Это то что вы хотели?

    • Помечено в качестве ответа Bergaro 17 октября 2015 г. 7:28
    13 октября 2015 г. 6:12
    Отвечающий
  • Вот до этого я дошел.. как число в label обнулить. Он сгенерировал к примеру число 16 пока я держал кнопку. Но после того как я её отпущу число находящееся в label должно обнулиться.. Вот что собственно мне нужно.
    13 октября 2015 г. 8:43
  • Может мне как-нибудь нужно сыграть событиями OnClick?

    Проще говоря я пишу визуализацию в VisualStudio для  TwinCAT.. И благодаря этой кнопке мне нужно осуществить движение объекта. Ставиться этот проект будет на сенсорную win7. На сенсоре правильно работает только событие кнопки Click.  

    При зажатой кнопке в label должна записываться 1, а при отпущенной 0.

    Задача мне показалась проще некуда уже.. но уже неделю не могу найти решение этой проблемы.

    13 октября 2015 г. 9:05
  • Мне кажется, что с событиями вы что то путаете. Скорее всего они нормально работают, только называются как нибудь StylusButtonUp. Ну а так, можно реализовать и на Click. Разметка из предыдущего примера, код вот такой:

    DispatcherTimer timer = null;
    
    private void RepeatButton_Click(object sender, RoutedEventArgs e)
    {
        if (timer == null)
        {
            timer = new DispatcherTimer(DispatcherPriority.Normal, this.Dispatcher);
            timer.Interval = new TimeSpan(0, 0, 0, 0, 500);
            timer.Tick += Timer_Tick;
        }
        timer.Stop();
        timer.Start();
        lbText.Content = "1";
    }
    
    private void Timer_Tick(object sender, EventArgs e)
    {
        lbText.Content = "0";
        timer.Stop();
        timer = null;
    }

    • Предложено в качестве ответа AlexFV 13 октября 2015 г. 17:09
    • Помечено в качестве ответа Bergaro 17 октября 2015 г. 7:28
    13 октября 2015 г. 9:38
    Отвечающий
  • Спасибо огромное!!! Все работает отлично!! Ещё раз спасибо!
    13 октября 2015 г. 10:49
  • Да не за что. Обращайтесь. Если какой-то ответ или ответы помогли вам с решением проблемы, не забудьте их отметить как ответ. Для этого под сообщением есть кнопка "Пометить как ответ".
    13 октября 2015 г. 12:04
    Отвечающий