2012-05-27 163 views
0

嗨,我在这里遇到问题。所以你可以看到每当txtBtn0和txtBtn1被点击时,它会增加自己的数组,然后用于squareChecked字符串。但是我想要首先做的是在txtBtn0和txtBtn1没有被点击的情况下给出错误信息。但它不会弹出任何东西。该按钮不起作用

 public partial class MainForm : Form 
{ 
    public int[] clickNumBoxArray = Enumerable.Repeat(1, 81).ToArray(); 

    public MainForm() 
    { 
     InitializeComponent(); 



    } ... ... ... 



     private void btn1_Click(object sender, EventArgs e) { 
     UserSquare checkClickedBox = new UserSquare(); 

     string checkClickBox = checkClickedBox.squareChecked(); 
     if (checkClickedBox == null) { 
     MessageBox.Show("You did not enter any text on the form"); 
     } 
    } 

    private void txtBtn1_Click(object sender, EventArgs e) { 
     clickNumBoxArray[1]++; 
     if (clickNumBoxArray[1] % 2 == 0) { 
      txtBtn1.BackColor = System.Drawing.Color.DarkOrange; 
     } else { 
      txtBtn1.BackColor = System.Drawing.Color.WhiteSmoke; 
     } 
    } 

    private void txtBtn0_Click(object sender, EventArgs e) { 
     clickNumBoxArray[0]++; 
     if (clickNumBoxArray[0] % 2 == 0) { 
      txtBtn0.BackColor = System.Drawing.Color.DarkOrange; 
     } else { 
      txtBtn0.BackColor = System.Drawing.Color.WhiteSmoke; 
     } 
    } 

这是其他类

 class UserSquare { 
    public string squareChecked() { 
     string clickedBoxes = null; 
     MainForm numBoxArray = new MainForm(); 
     int[] clickNumBoxArray = numBoxArray.clickNumBoxArray; 
     for (int i = 0; i < 81; i++) { 
      if (clickNumBoxArray[i] % 2 == 0) { 
       clickedBoxes += "txtBtn" + i + ", "; 
      } 
     } return clickedBoxes; 
    } 

回答

1

关于IndexOutOfRange Exception你的问题是,你在这里实现你的清单

public int[] clickNumBoxArray = Enumerable.Repeat(1, 80).ToArray(); 

为从1开始和结束80 = 80个元件

但在方法的for loop从0开始并完成81 = 81个元件

和关于由误差控制..简单和棘手..ÿ ou可以实现internal/public boolean作为默认false,并在鼠标事件中设置为true,因为您需要(iemouseclick事件)..您的错误方法的结束或您需要的其他位置,设置为返回false以准备好另一次点击 - 事件控制

关于ButtonClick不会触发它的事件(如果我没有误解):你删除了你的一些按钮方法吗?你能忘记实施它吗?

一旦打开你的设计模式上点击您要检查你的控件,然后打开属性=>事件..如果您实现的事件,那么它应该是像这样:(IE)

(财产)鼠标点击(值)Button1_MouseClick

3

线:

for (int i = 0; i < 81; i++) 

应该是:

for (int i = 0; i < 80; i++) 

阵列clickNumBoxArray只有80元,标0到79你通过81项循环,指数从0到80

+0

谢谢但按钮仍然无法正常工作 –

0

我通过移动

public int[] clickNumBoxArray = Enumerable.Repeat(1, 81).ToArray(); 

到UserSquare类固定它。我发现UserSquare类只在程序运行但没有更新时才会获取值。