0

我只想在 Form1() 中初始化类 Test!如果我使用下面的代码启动程序,则调用 Class Test 中的构造函数 Test 。

类测试中的测试是一个反映回form1回调函数的函数。但我想在 Timer1_Tick 中调用它,而不是在窗体/程序启动时调用它!

有任何想法吗?

谢谢!

表格 1 代码:

namespace Klasse
{
    public partial class Form1 : Form
    {

        public System.Windows.Forms.Timer timer1;
        private Button[] button;
        Random rand = new Random();
        int getroffen = 0;

        public Form1()
        {

            Test Object = new Test(rand,callbackFunction);

            InitializeComponent();
            button = new Button[5];
            timer1 = new System.Windows.Forms.Timer();
            timer1.Tick += new EventHandler(Timer1_Tick);
            timer1.Interval = rand.Next(500, 1001);
            timer1.Start();         
            button[0] = button1;
            button[1] = button2;
            button[2] = button3;
            button[3] = button4;
            button[4] = button5;
        }

        void Timer1_Tick(object sender,EventArgs e)
        {
            timer1.Stop();   
        }

        void button_Click(object sender, EventArgs e)
        {
           getroffen = Convert.ToInt16(((Button)sender).Name);    
        }

        void callbackFunction(int buttonNr, bool aktiv)
        {
            if (aktiv == true)
            {
                button[buttonNr-1].BackColor = Color.Red;

            }
            if (aktiv == false)
            {
                button[buttonNr-1].BackColor = SystemColors.Control;
            }
            timer1 = new System.Windows.Forms.Timer();
            timer1.Tick += new EventHandler(Timer1_Tick);
            timer1.Interval = rand.Next(500, 1001);
            timer1.Start();
        }
    }
}

班级代码:

namespace Klasse
{


    class Test

    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

        }

        public delegate void ButtonAktivieren(int button ,bool passiv);

        private int anzahlGezeigt = 0;

        private int anzahlTreffer = 0;

        private int button = 0;

        private bool passiv;
        public bool Passiv
        {
            get { return passiv; }
        }

        private Random zufall;

        private ButtonAktivieren aktivierenCallback;

        public Test (Random zufall, ButtonAktivieren aktivierenCallback)
        {
            anzahlGezeigt++;
            if (anzahlGezeigt % 2 == 0)
            {
                aktivierenCallback(button, passiv);
            }
            if (anzahlGezeigt %2 > 0)
            {
            button = zufall.Next(1, 6);
            aktivierenCallback(button, passiv);    
            }

        }

        public void Aktivieren()
        {
            passiv = true;
        }

        public void Passivieren()
        {
            passiv = false;
        }

        private void CheckGameOver()
        {
            if (anzahlGezeigt > anzahlTreffer)
            {
                MessageBox.Show("Game Over!");
                Application.Exit();
            }
        }

        public void Getroffen(int getroffenerButton)
        {
            if (getroffenerButton == button)
            {
                anzahlTreffer++;
            }
        }
    }
}
4

1 回答 1

0

使Test方法可调用,而不是构造函数,如下StartTest所示。

    public void StartTest (Random zufall, ButtonAktivieren aktivierenCallback)
    {
        anzahlGezeigt++;
        if (anzahlGezeigt % 2 == 0)
        {
            aktivierenCallback(button, passiv);
        }
        if (anzahlGezeigt %2 > 0)
        {
        button = zufall.Next(1, 6);
        aktivierenCallback(button, passiv);    
        }

    }

    public void Aktivieren(Random zufall, ButtonAktivieren aktivierenCallback)

    {
        passiv = true;
        StartTest(Random zufall, ButtonAktivieren aktivierenCallback);
    }

表单代码调整:

    Test Object;

    public Form1()
    {
        //some initializing code

        Object = new Test();

        //the rest of initializing code
    }




    void Timer1_Tick(object sender,EventArgs e)
    {
        Object.StartTest(rand, callbackFunction)
        timer1.Stop();   
    }

或者另一种方式:将Random zufall和存储ButtonAktivieren aktivierenCallbacktest class构造函数中并在激活中使用它们:

    Random _zufall;
    ButtonAktivieren _aktivierenCallback;


    public void Test (Random zufall, ButtonAktivieren aktivierenCallback)
    {
        _zufall = zufall;
        _aktivierenCallback = aktivierenCallback;
    }


    public void Aktivieren()
    {
        passiv = true;

        anzahlGezeigt++;
        if (anzahlGezeigt % 2 == 0)
        {
            _aktivierenCallback(button, passiv);
        }
        if (anzahlGezeigt %2 > 0)
        {
        button = _zufall.Next(1, 6);
        _aktivierenCallback(button, passiv);    
        }
    }
于 2013-06-19T16:07:51.583 回答