将数组的值传递给按钮 C# WinForm
Passing a value of an array to button C# WinForm
我知道数组。但我只知道使用控制台,现在我不知道如何使用 visual studio 以 windows 形式实现它,而且我在网上看不到任何关于我不想做的事情。比方说,我初始化了一个 int 数组:
int[] n = new int[5] {1, 2, 3, 4, 5};
现在我想要的是,例如,有5个按钮,假设当我点击按钮1时,它会输出:
MessageBox.Show("Number " + ... // random value in an array n
其他 5 个按钮也会发生同样的情况,但不会重复。我知道我的问题可能会被标记为不合适,但是,我从昨天开始问这个问题,整晚都在研究,但仍然一无所获。
所以你需要从数组中获取一个随机值,然后删除该值,这样其他按钮就不会显示相同的数字。 List<int>
会更容易使用。
private void formLoad(object sender, EventArgs e) {
// wire this handler up to your Form.Load event
List<int> numbers = new List<int>() {101,22,373,414,625};
Random random = new Random();
Button1.Click += clickHandler;
Button2.Click += clickHandler;
Button3.Click += clickHandler;
Button4.Click += clickHandler;
Button5.Click += clickHandler;
}
private void clickHandler(object sender, EventArgs e) {
if (0 == numbers.Count) {
MessageBox.Show("There are no more numbers in the list.");
return;
}
int index = random.Next(0, numbers.Count);
MessageBox.Show("Number " + numbers[index].ToString());
numbers.RemoveAt(index);
}
我想建议 解决方案。它非常简单易懂。提供此解决方案的唯一原因是,如果您想维护所选项目的历史记录,那么此解决方案可能对您有所帮助。
您可以将使用过的值存储在一个列表中,下次随机时可以检查
正在取号。
获取随机整数。您可以使用 Random.Next(int32, int32) method of Random class.
int[] n = new int[5] {1, 2, 3, 4, 5};
List<int> usedN = new List<int>();
Random rnd = new Random();
private void button1_click(object sender, EventArgs e)
{
int iIndex = rnd.Next(0, n.Length-1);
int iRnd = n[iIndex];
if (usedN.Count == n.Length)
return;
usedN.Add(iRnd);
MessageBox.Show("Number " + iRnd.ToString());
}
此答案与 Sam Axe 的答案有相似之处,但独立创建。它可能会帮助某人。代码可在 https://github.com/zedfoxus/Whosebug29203245
表格有 5 个按钮和一个额外的按钮,用于在数字用完后重置。
Form1.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Whosebug29203245
{
public partial class Form1 : Form
{
private readonly List<int> _numbers = new List<int> {1, 2, 3, 4, 5};
private readonly List<int> _asked = new List<int>();
public Form1()
{
InitializeComponent();
}
/// <summary>
/// Select random integer from the list of integers. If no numbers are left, throw an exception
/// </summary>
/// <returns>Random integer from the list</returns>
private int RandomInteger()
{
if (_numbers.Count == 0)
{
throw new Exception("All numbers have been selected");
}
var random = new Random();
var index = random.Next(_numbers.Count);
var selectedNumber = _numbers[index];
_asked.Add(selectedNumber);
_numbers.Remove(selectedNumber);
return selectedNumber;
}
/// <summary>
/// Show the message box. If all numbers are selected, show appropriate message
/// </summary>
private void ShowMessage(object sender, EventArgs e)
{
try
{
MessageBox.Show(@"Number " + RandomInteger());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// Reset numbers
/// </summary>
private void button6_Click(object sender, EventArgs e)
{
_numbers.AddRange(_asked);
_asked.Clear();
}
}
}
我知道数组。但我只知道使用控制台,现在我不知道如何使用 visual studio 以 windows 形式实现它,而且我在网上看不到任何关于我不想做的事情。比方说,我初始化了一个 int 数组:
int[] n = new int[5] {1, 2, 3, 4, 5};
现在我想要的是,例如,有5个按钮,假设当我点击按钮1时,它会输出:
MessageBox.Show("Number " + ... // random value in an array n
其他 5 个按钮也会发生同样的情况,但不会重复。我知道我的问题可能会被标记为不合适,但是,我从昨天开始问这个问题,整晚都在研究,但仍然一无所获。
所以你需要从数组中获取一个随机值,然后删除该值,这样其他按钮就不会显示相同的数字。 List<int>
会更容易使用。
private void formLoad(object sender, EventArgs e) {
// wire this handler up to your Form.Load event
List<int> numbers = new List<int>() {101,22,373,414,625};
Random random = new Random();
Button1.Click += clickHandler;
Button2.Click += clickHandler;
Button3.Click += clickHandler;
Button4.Click += clickHandler;
Button5.Click += clickHandler;
}
private void clickHandler(object sender, EventArgs e) {
if (0 == numbers.Count) {
MessageBox.Show("There are no more numbers in the list.");
return;
}
int index = random.Next(0, numbers.Count);
MessageBox.Show("Number " + numbers[index].ToString());
numbers.RemoveAt(index);
}
我想建议
您可以将使用过的值存储在一个列表中,下次随机时可以检查 正在取号。
获取随机整数。您可以使用 Random.Next(int32, int32) method of Random class.
int[] n = new int[5] {1, 2, 3, 4, 5};
List<int> usedN = new List<int>();
Random rnd = new Random();
private void button1_click(object sender, EventArgs e)
{
int iIndex = rnd.Next(0, n.Length-1);
int iRnd = n[iIndex];
if (usedN.Count == n.Length)
return;
usedN.Add(iRnd);
MessageBox.Show("Number " + iRnd.ToString());
}
此答案与 Sam Axe 的答案有相似之处,但独立创建。它可能会帮助某人。代码可在 https://github.com/zedfoxus/Whosebug29203245
表格有 5 个按钮和一个额外的按钮,用于在数字用完后重置。
Form1.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Whosebug29203245
{
public partial class Form1 : Form
{
private readonly List<int> _numbers = new List<int> {1, 2, 3, 4, 5};
private readonly List<int> _asked = new List<int>();
public Form1()
{
InitializeComponent();
}
/// <summary>
/// Select random integer from the list of integers. If no numbers are left, throw an exception
/// </summary>
/// <returns>Random integer from the list</returns>
private int RandomInteger()
{
if (_numbers.Count == 0)
{
throw new Exception("All numbers have been selected");
}
var random = new Random();
var index = random.Next(_numbers.Count);
var selectedNumber = _numbers[index];
_asked.Add(selectedNumber);
_numbers.Remove(selectedNumber);
return selectedNumber;
}
/// <summary>
/// Show the message box. If all numbers are selected, show appropriate message
/// </summary>
private void ShowMessage(object sender, EventArgs e)
{
try
{
MessageBox.Show(@"Number " + RandomInteger());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// Reset numbers
/// </summary>
private void button6_Click(object sender, EventArgs e)
{
_numbers.AddRange(_asked);
_asked.Clear();
}
}
}