Почему не работают кнопки в моем приложении C #? - PullRequest
1 голос
/ 01 октября 2010

Я делаю эту лабораторную работу из книги самостоятельно, и я сделал приложение, в котором гоняются акулы.Есть радио-кнопка, которая должна динамически обновлять метку справа, а также кнопка, которая фактически запускает гонку.Все раньше работало, а затем я переименовал несколько вещей, и теперь ничего не работает.

Снимок экрана приложения:

image http://cl.ly/f08f4e22761464e0c2f3/content

Форма класса:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace project1
{
    public partial class Game : Form
    {
        private Shark[] sharks;
        private Guy[] guys;
        private Guy selectedGuy;

        public Game()
        {
            InitializeComponent();

            Random moreRandom = new Random();

            int start = myTrack.Location.X;
            int finish = myTrack.Width - 65;

            sharks = new Shark[4]
                {
                    new Shark() {myRandom = moreRandom, myPictureBox = myShark1, myPBStart = start, trackLength = finish},
                    new Shark() {myRandom = moreRandom, myPictureBox = myShark2, myPBStart = start, trackLength = finish},
                    new Shark() {myRandom = moreRandom, myPictureBox = myShark3, myPBStart = start, trackLength = finish},
                    new Shark() {myRandom = moreRandom, myPictureBox = myShark4, myPBStart = start, trackLength = finish}
                };

            guys = new Guy[3]
                {
                    new Guy() {myName="Joe", cash=50, myRadioButton=rbGuy1, myLabel=labelBet1},
                    new Guy() {myName="Bob", cash=75, myRadioButton=rbGuy2, myLabel=labelBet2},
                    new Guy() {myName="Al", cash=45, myRadioButton=rbGuy3, myLabel=labelBet3}
                };

            selectedGuy = guys[0];
            rbGuy1.Tag = guys[0];
            rbGuy2.Tag = guys[1];
            rbGuy3.Tag = guys[2];            

            updateGui();
        }

        private void myChanged(object sender, EventArgs e)
        {
            selectedGuy = getSelectedGuy(sender);
            betterLabel.Text = selectedGuy.myName;
        }

        private void betAmountValue(object sender, EventArgs e)
        {
            updateMin();
        }

        private void Bet_Click(object sender, EventArgs e)
        {
            int bet = (int) betAmount.Value;
            int myFish = (int) sharkNumber.Value;
            selectedGuy.placeBet(bet, myFish);
            updateGui();
        }

        private void raceBtn_Click(object sender, EventArgs e)
        {
            betBtn.Enabled = false;

            bool noWinner = true;
            while(noWinner)
            {
                for (int dogFish = 0; dogFish < sharks.Length; dogFish++)
                {
                    Application.DoEvents();
                    if(sharks[dogFish].Swim())
                    {
                        showWinner(dogFish);
                        collectBets(dogFish);
                        noWinner = false;
                    }
                }
            }

            updateGui();

            betBtn.Enabled = true;
        }

        private void showWinner(int fish)
        {
            MessageBox.Show(string.Format("Winner Winner People Dinner! \nShark {0} won!", fish + 1));
        }

        private void collectBets(int fish)
        {
            for (int guyNumber = 0; guyNumber < guys.Length; guyNumber++)
            {
                guys[guyNumber].collect(fish + 1);
                guys[guyNumber].resetBet();
            }
        }

        private void updateMin()
        {
            minBetLabel.Text = string.Format("Minimum bet: 5 bucks", betAmount.Value);
        }

        private Guy getSelectedGuy(object sender)
        {
            RadioButton rb = (RadioButton)sender;
            return (Guy)rb.Tag;
        }

        private void updateGui()
        {
            for (int guyNumber = 0; guyNumber < guys.Length; guyNumber++)
            {
                guys[guyNumber].updateLabels();
            }

            for (int fish = 0; fish < sharks.Length; fish++)
            {
                sharks[fish].startPosition();
            }

            updateMin();
        }
    }
}

Акула Класс:

using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace project1
{
    public class Shark
    {
        public int myPBStart; // Where the PictureBox starts
        public int trackLength; // How long the racetrack is
        public PictureBox myPictureBox = null; // The PictureBox object
        public int location = 0; // My location on the racetrack
        public Random myRandom; // An instance of Random

        public Shark()
        {
            location = 0;
            myPictureBox = new PictureBox();
            myRandom = new Random();
            trackLength = 100;
            myPBStart = 0;
        }

        public bool Swim()
        {
            int distance = myRandom.Next(1, 4);
            location += distance;

            movePB(distance);

            return location > trackLength;
        }

        private void movePB(int distance)
        {
            Point p = myPictureBox.Location;
            p.X += distance;
            myPictureBox.Location = p;
        }

        public void startPosition()
        {
            location = myPBStart;

            Point p = myPictureBox.Location;
            p.X = location;
            myPictureBox.Location = p;
        }
    }
}

Я могу предоставить больше ресурсов, если это необходимо, но это основная суть.

Ответы [ 3 ]

2 голосов
/ 01 октября 2010

когда вы переименовали их, вы, вероятно, сделали это, отредактировав код, а не изменив свойства элемента управления.

Дизайнер Winforms в VS создал код для вас за кулисами, связывающий изобретения. Этот код использует названия элементов управления. Найдите файл с именем formname_designer.cs. Обратите внимание, что есть строки, которые все еще имеют старые имена элементов управления. Вы можете изменить этот код

Вот почему хорошая привычка давать элементам управления хорошие имена при запуске.

2 голосов
/ 01 октября 2010

Используя Visual Studio, убедитесь в следующем:

1) Для каждого переключателя убедитесь, что событие CheckedChanged подключено к вашей функции myChanged.
2) Убедитесь, что событие «Ставки» Button.Click подключено к вашей функции Bet_Click.
3) Проверьте «Гонка!» Button.Click событие подключено к вашей функции raceBtn_Click.

Безопасный способ переименования - щелкнуть правой кнопкой мыши имя переменной, Refactor, Rename. Это обеспечит правильное переименование любых ссылок на переменную

1 голос
/ 01 октября 2010

Убедитесь, что события в ваших элементах управления все еще связаны с правильными обработчиками событий в вашем коде. Иногда, когда вы переименовываете что-то, эта ссылка может сломаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...