【问题标题】:C# How to randomize a color on buttons in Form 2 from clicking a button on Form1C#如何通过单击Form1上的按钮来随机化Form 2中按钮的颜色
【发布时间】:2022-01-09 03:35:36
【问题描述】:

我正在构建一个 C# 电影院程序。在 Form1 上,单击“保留”按钮时,我希望 Form 2 上的 21 个按钮随机将 6 个席位更改为“红色”。我希望每次在表格 1 上按下“预订”按钮时,它都是不同的座位。

这是我正在尝试制作的代码。

Random random = new Random();

private Color GetRandomColor()
{
    return Color.FromArgb(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));
}

private void reserve_button_Click(object sender, EventArgs e)
{
    button1.BackColor = GetRandomColor();
    button2.BackColor = GetRandomColor();
    button3.BackColor = GetRandomColor();
    button4.BackColor = GetRandomColor();
}

Movie Menu Picture Seating Selection

【问题讨论】:

  • 文本和代码似乎做了两件不同的事情。代码似乎随机化了按钮的“颜色”。这不同于……”我希望表格 2 上的 21 个按钮将 6 个席位随机更改为“红色”。我希望每次在表格 1 上按下“预订”按钮时,它都是不同的座位。” ... ? …您是要随机选择六 (6) 个选定的座位还是按钮的颜色?
  • 您没有发布足够的代码。当您只想要红色和默认颜色时,为什么会得到随机颜色?您需要将座位按钮放在一个列表中,每次随机获得 6 个座位,然后将它们的颜色设置为红色。
  • 就两个表单之间的通信而言,您可能会发现……Communicate between two windows forms in C#……很有帮助。
  • 感谢您的回复。在选择单击时会变为绿色的座位之前,我正在尝试将按钮随机化为红色。如果一个按钮已经是红色并被点击,它将提示选择另一个座位,因为它已被预订。

标签: c# random


【解决方案1】:

好吧,你应该选择6 随机 座位,这些座位不是 Red 并将它们涂成红色。假设您使用 Winforms

Form2 显示座位:

using System.Linq;

  ... 

public bool MakeReservation(int count) {  
  // Buttons to exclude from being painted into red:
  HashSet<Button> exclude = new HashSet<Button>() {
    //TODO: put the right names here
    btnBook,
    btnClear,  
  };

  var buttons = Controls                             // All controls
    .OfType<Button>()                                // Buttons only
    .Where(button => button.BackColor != Color.Red)  // Non red ones
    .Where(button => !exclude.Contains(button))      // we don't want some buttons
    .OrderBy(_ => random.NextDouble())               // In random order
    .Take(count)                                     // count of them
    .ToArray();                                      // organized as an array

  //TODO: you can check here if we have 6 buttons, not less  
  if (buttons.Length < count) {
    // Too few seats are free 
    return false; 
  }

  // Having buttons selected, we paint them in red:
  foreach(var button in buttons)
    button.BackColor = Color.Red;

  return true;
}

Form1 打开一个新的Form2 或找到现有的时:

private void reserve_button_Click(object sender, EventArgs e) {
  var form = Application
    .OpenForms
    .OfType<Form2>()
    .LastOrDefault();

  if (form == null) 
    form = new Form2();
  
   form.Show();
   //TODO: put the actual number instead of 6
   form.MakeReservation(6);
}

【讨论】:

  • 这是完美的工作,我唯一忘了提到的是,当随机化发生时,“书”按钮也变成了红色。如何仅排除该按钮变为红色?
  • @Jfern32:您可以在另一个.Where 的帮助下排除一些按钮,请看我的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 2014-10-07
  • 2016-07-21
  • 1970-01-01
  • 2022-12-06
相关资源
最近更新 更多