2016-10-31 93 views
0

我正在制作一个Windows窗体应用程序,我希望能够在按钮按下时用列表中的随机变量显示一个消息框。我创建了一个名为SetRandomCode的类来设置列表,并且希望为变量'testVariable'设置一个随机数。我是相当新的C#,所以我可能要对这个完全错误的方式,但这里是我的代码:从c#中按钮列表中选择一个随机变量#

SetRandomCode.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace WindowsFormsApplication2 
{ 
    public class SetRandomCode 
    { 
     List<string> randomCodes = new List<string>(); 

     public void setCode() 
     { 
      Random r = new Random(); 
      int index = r.Next(randomCodes.Count); 
      string testVariable = randomCodes[index]; 
      randomCodes.Add("Test"); 
      randomCodes.Add("Test 2"); 
      randomCodes.Add("Test 3"); 
     } 
    } 
} 

Form1.cs的

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show(testVariable); 
     } 
    } 
} 

我得到的错误是'名称'testVariable'在当前上下文中不存在。

任何帮助,将不胜感激:)

+0

你的'testVariable'在'setCode'的范围内声明,并且只能在那里使用。 – Jim

+0

另外,看着你的代码,你从'randomCodes'通过'string testVariable = randomCodes [index];'得到一个值,但是你在下一行填充列表。您想先填充列表,然后从中选择值。 – rbm

回答

3

尝试使类SetRandomCode静态

public static class SetRandomCode 
{ 

    public static string setCode() 
    { 
     List<string> randomCodes = new List<string>(); 
     randomCodes.Add("Test"); 
     randomCodes.Add("Test 2"); 
     randomCodes.Add("Test 3"); 
     Random r = new Random(); 
     int index = r.Next(0, randomCodes.Count); 
     return randomCodes[index]; 
    } 
} 

,然后在Form1

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     string testVariable = SetRandomCode.setCode(); 
     MessageBox.Show(testVariable); 
    } 
} 

一些代码等差异是在计数之前填充列表,否则返回的值将始终为0,在您从中获取值以避免错误之前,也会填充列表。

在此新代码中,测试变量正在Form1中设置,而不是在您的完全独立的类中设置。通过静态方法,类可以调用它的方法而不需要实例化,从而允许与你之前尝试的最接近的方法

+0

你的方法是'setCode()',但你用'setCode(randomCodes)'调用它;' – rbm

+0

@rbm我不好,我的意思是让它把列表作为输入,谢谢 –

+2

而且它仍然没有任何意义 - 你正在传入一个空的列表,然后返回一个字符串... – rbm