【问题标题】:Count clicks of specific Button计算特定按钮的点击次数
【发布时间】:2018-05-01 14:58:31
【问题描述】:

我正在编写计算红色背景按钮点击次数的函数。 此功能不起作用。 我有 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(); 
}

其余代码。

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);
                    }
                }

            }
        }
    }
}

【问题讨论】:

  • 你可以console.write (sender as Button).Background 同时点击红色按钮吗?
  • 您确定 else 条件没有将其重置为 0?

标签: c# xaml


【解决方案1】:

尝试在 if 条件之后删除行尾的 ;

您可以使用“Brushes.Red”检查背景,而不是创建新对象

【讨论】:

  • 出色的观察力。当我们试图解决一些大问题时,我们通常会忽略一些小错误!
  • 好的,更好,但现在计数器不计算任何东西。
  • @MichałŁahchim 请发布您更新的代码并准确说明出错的位置,例如if-statement 是否在您期望它不会返回 false 时返回?还是有其他问题?
  • @MichałŁahchim 绘制按钮时将背景设置为“Brushes.Red”,然后在 Btn_Click 中与 == Brushes.Red 进行比较
  • colors 列表中的颜色是什么?
【解决方案2】:

为什么要将 ButClick 事件附加到所有 40 个按钮?为什么不把它加到那些红色上呢? 选择按钮上的属性并将点击事件分配给应该拥有它的那些。

【讨论】:

  • 因为我想创建计算红色按钮点击次数的功能。所以这就是我为 40 个按钮使用一个功能的原因。
  • @MichałŁahchim 我认为随机意味着,如果您只将But_Click 附加到红色按钮,那么您无需担心检查事件发送者是否为红色,因为只有红色按钮会触发事件
  • @Bassie 是的,我就是这个意思。
  • Bassie 好的-但我是 Visual Studio 的初学者-我不知道该怎么做。
  • @MichałŁahchim 你必须将点击事件连接到每个按钮,否则什么都不会发生。如果您正在使用 Windows 窗体,您可以单击设计器视图中的按钮并选择按钮的属性,断开不需要的按钮的事件。如果您在 wpf xaml 中工作,您基本上可以删除不需要按钮的 xaml 代码中的 OnClicked="But_Click"。
【解决方案3】:

牢记 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
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2020-05-30
    • 2014-05-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    相关资源
    最近更新 更多