Подсчет кликов конкретной кнопки - PullRequest
0 голосов
/ 01 мая 2018

Я пишу функцию для подсчета нажатия кнопки красного фона. Эта функция не работает. У меня 40 кнопок с одинаковой функцией для нажатия кнопки «ButClick». Но когда я нажимаю любую кнопку (например, с зеленым фоном) - счетчик считает. Я хочу сделать это только тогда, когда я нажму кнопку с красным фоном.

private void But_Click(object sender, RoutedEventArgs e)
{
    var column = Grid.GetColumn(sender as Button);
    var row = Grid.GetRow(sender as Button);
    LabelX.Content = column.ToString();
    LabelY.Content = row.ToString();

    if ((sender as Button).Background == new SolidColorBrush(Colors.Red));
    {
        counts += 1;
        LabelCounterOfClick.Content = counts.ToString();
    }

}

обновление

Теперь он ничего не считает. Когда я нажимаю любую кнопку, счетчик показывает 0. Я делаю что-то с функцией, если не прав (он не обнаруживает красный)

private void But_Click(object sender, RoutedEventArgs e) 
{ 
    var column = Grid.GetColumn(sender as Button); 
    var row = Grid.GetRow(sender as Button); 
    LabelX.Content = column.ToString(); 
    LabelY.Content = row.ToString();

    if ((sender as Button).Background == new SolidColorBrush(Colors.Red))
    {
        counts += 1;

    }
    else
    {
        counts = 0;
    }

    LabelCounterOfClick.Content = counts.ToString(); 
}

REst of Code.

namespace Silnik_Zmiany_koloru
{
    public partial class MainWindow : Window
    {
        public Random _random;
        public MainWindow()
        {
            InitializeComponent();
            DispatcherTimer dt = new DispatcherTimer();
            dt.Interval = TimeSpan.FromSeconds(1);
            dt.Tick += Dt_Tick;
            dt.Start();
        }

        private void Dt_Tick(object sender, EventArgs e)
        {
            Losowanie(); // zmiana kolorow (losowe)
        }
        int counts = 0;


        private void But0_0_Click(object sender, RoutedEventArgs e)
        {
            Losowanie();
        }

        private Random random = new Random();
        private Random random1 = new Random();

        int ilosc_kolorow = 3;
        private Color[] colors = new Color[]
               {
               Colors.Red,
               Colors.Blue,
               Colors.Green,
               };


        private void Losowanie()
        {
            for (int i = 0; i <= 6; i++)
            {
                for (int k = 3; k <= 10; k++)
                {
                    var ele = MainGrid.FindName("But" + i + "_" + random.Next(0, 8));
                    Button button = ele as Button;
                    if (button != null)
                    {
                        Change_color(button);
                    }
                }

            }
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Почему вы прикрепили событие ButClick ко всем 40 кнопкам? Почему бы просто не добавить его к этим красным? Выберите свойства на кнопке и назначьте событие клика тем, у кого оно должно быть.

0 голосов
/ 01 мая 2018

Помните об исправлении AbduGo.

Не лучшее решение, но попробуйте сделать это,

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Button btn = (Button)sender;

        Brush btnBrush = btn.Background;
        string color = "";
        if (btnBrush is SolidColorBrush)
        {
            color = ((SolidColorBrush)btnBrush).Color.ToString();
        }

        if (color ==  Brushes.Red.ToString())
        {
           //your logic of incrementing counter
        }
        else
        {
           //your logic of resting counter
        }
    }
0 голосов
/ 01 мая 2018

Попробуйте удалить ; в конце строки после условия if

и вы можете проверить фон с помощью Brushes.Red вместо создания нового объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...