簡體   English   中英

將數組的值傳遞給按鈕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個按鈕,假設當我單擊button1時,它將輸出:

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類的Random.Next(int32,int32)方法。

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/StackOverflow29203245上找到代碼

表單上有5個按鈕和一個額外的按鈕,可在數字用完后重置數字。

Form1.cs的

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace StackOverflow29203245
{
    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();
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM