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; 
    }
4

3 に答える 3

3

この線:

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

する必要があります:

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

配列clickNumBoxArrayには、インデックス0〜79の80個の要素しかありませんでした。インデックス0〜80の81個のアイテムをループしています。

于 2012-05-27T00:28:15.427 に答える
1

あなたの問題についてIndexOutOfRange Exceptionあなたはここにあなたのリストを実装することです

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

1から始まり、80=80要素で終了します。

しかし、メソッドでfor loopは、0から開始して81=81要素で終了します。

エラーによる制御について..単純でトリッキーです..デフォルトとしてinternal/を実装し、必要に応じてマウスイベント(iemouseclickイベント)に設定できます。エラーメソッドの終了またはその他の必要な場所で、falseに設定します。別のクリックイベント制御の準備をするpublic booleanfalsetrue

ButtonClickについてそのイベントを起動しない(誤解されていない場合):ボタンのいくつかのメソッドを削除しましたか?あなたはそれを元に戻すのを忘れられましたか?

デザインモードを開き、チェックしたいコントロールを1回クリックしてから、プロパティ=>イベントを開きます。イベントが実装されている場合は、次のようになります:(ie)

(プロパティ)MouseClick(値)Button1_MouseClick

于 2012-05-27T00:57:48.140 に答える
0

動かして直しました

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

UserSquareクラスに。UserSquareクラスは、プログラムの実行時にのみ値を取得し、更新しない場合にのみ値を取得することがわかりました。

于 2012-05-27T01:13:32.133 に答える