Wywołanie akcji przycisku w kodzie

0

Witam wszystkich, temat dosyć banalny, lecz nie potrafię sobie poradzić aby wszystko było ok. Mianowicie problem polega na wywołaniu akcji przypisanej do przycisku za pomocą wartości z case'a przesyłanej do aplikacji przez SIPa. posiadam akcje przycisku:

public void button_click1(object sender, EventArgs e)
        {
            //Button b = (Button)sender;
            if (turn)
                this.A1.Text = "X";
            else
                this.A1.Text = "O";

            turn = !turn;
            this.A1.Enabled = false;
            turn_count++;

            checkForWinner();
        }

i chcę ją wywołać w ten sposób:

void call_DtmfReceived(object sender, VoIPEventArgs<DtmfInfo> e)
        {
            DisposeCurrentConnector();
            switch (e.Item.Signal.Signal)
            {
                case 0: Console.WriteLine("0"); break;
                case 1: Console.WriteLine("1"); button_click1(null, null); break;
                case 2: Console.WriteLine("2");  break;
                case 3: Console.WriteLine("3");  break;
                case 4: Console.WriteLine("4");  break;
                case 5: Console.WriteLine("5");  break;
                case 6: Console.WriteLine("6");  break;
                case 7: Console.WriteLine("7");  break;
                case 8: Console.WriteLine("8");  break;
                case 9: Console.WriteLine("9");  break;
                case 10: System.Diagnostics.Process.GetCurrentProcess().Kill();  Console.WriteLine("*"); break;
                case 11: Console.WriteLine("#");  break;

            }
        }

efekt takiego rozwiązania jest następujący:
title

Liczę na każdą pomoc, każdą myśl/rozwiązanie.

Pozdrawiam!

0

A czym powinno być pole A1, bo jak widać, to obecnie jest null?

0

A1 jest jednym z 9 przycisków zaimplementowanych w innej klasie

0

To najpierw przypisz temu polu obiekt, bo na null nie da się operować. Spójrz na okienko "Automatyczne" w swoim VS.

0

Hmm nie, to nie to.. pole już wcześniej sprawdzałem niestety jest to samo, cokolwiek nie byłoby wpisane w pole A1.Text wciąż problem z nullem :)

0

No bo przecież to A1 jest nullem, więc nie możesz nic z tym zrobić.
Musisz przypisać wartość do A1, a nie do jakiejś jego właściwości.

0

Mógłbyś napisać mniej więcej jak to ma wyglądać? Chodzi o to, że podczas normalnego kliknięcia myszką akcja wykonuje się bez problemu, jedynie podczas "ręcznego" wywołania pojawia się ten problem.

0

this.A1 = new TextBox();
Albo lepiej pokaż więcej kodu.

0

Pomogło na ten błąd, lecz graficznie nie został wyświetlony wprowadzony tekst =/ przechodząc dalej napotykam ten sam błąd sprawdzając pierwszą linię..:

public void checkForWinner()
        {
            bool there_is_a_winner = false;

            //poziomo
            if ((A1.Text == A2.Text) && (A2.Text == A3.Text) && (!A1.Enabled))
                there_is_a_winner = true;
            else if ((B1.Text == B2.Text) && (B2.Text == B3.Text) && (!B1.Enabled))
                there_is_a_winner = true;
            else if ((C1.Text == C2.Text) && (C2.Text == C3.Text) && (!C1.Enabled))
                there_is_a_winner = true;

            //pionowo
            else if ((A1.Text == B1.Text) && (B1.Text == C1.Text) && (!A1.Enabled))
                there_is_a_winner = true;
            else if ((A2.Text == B2.Text) && (B2.Text == C2.Text) && (!A2.Enabled))
                there_is_a_winner = true;
            else if ((A3.Text == B3.Text) && (B3.Text == C3.Text) && (!A3.Enabled))
                there_is_a_winner = true;

            //ukos
            else if ((A1.Text == B2.Text) && (B2.Text == C3.Text) && (!A1.Enabled))
                there_is_a_winner = true;
            else if ((A3.Text == B2.Text) && (B2.Text == C1.Text) && (!C1.Enabled))
                there_is_a_winner = true;

            if (there_is_a_winner)
            {
                disableButtons();

                String winner = "";
                if (turn)
                    winner = "Gracz 2";
                else
                    winner = "Gracz 1";
                MessageBox.Show(winner + " Wygrał!", "Koniec");
            }
            else
            {
                if (turn_count == 9)
                    MessageBox.Show("Brak zwyciężcy", "Koniec");
            }
        }

czy problem z odwołaniem do przycisków może leżeć w tym, iż tworzone są one w oknie klasy desingera?

1

Jeśli A1 to jest nazwa kontrolki, którą położyłeś na formę w designerze, to najpewniej nie wywołujesz gdzieś metody InitializeComponents(), która powinna być wywołana w konstruktorze formy.

0

Klasa CallHandler.Designer metoda, o której wspominasz

private void InitializeComponent()
        {
            this.menuStrip1 = new System.Windows.Forms.MenuStrip();
            this.plikToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.nowaGraToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.wyjścieToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.pomocToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.oGrzeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.A1 = new System.Windows.Forms.Button();
            this.A2 = new System.Windows.Forms.Button();
            this.A3 = new System.Windows.Forms.Button();
            this.B1 = new System.Windows.Forms.Button();
            this.B2 = new System.Windows.Forms.Button();
            this.B3 = new System.Windows.Forms.Button();
            this.C1 = new System.Windows.Forms.Button();
            this.C2 = new System.Windows.Forms.Button();
            this.C3 = new System.Windows.Forms.Button();
            this.menuStrip1.SuspendLayout();
            this.SuspendLayout();


            // A1
            // 
            this.A1.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
            this.A1.Location = new System.Drawing.Point(12, 37);
            this.A1.Name = "A1";
            this.A1.Size = new System.Drawing.Size(75, 75);
            this.A1.TabIndex = 1;
            this.A1.Text = " ";
            this.A1.UseVisualStyleBackColor = true;
            this.A1.Click += new System.EventHandler(this.button_click1);
0

Dzięki wszystkim za zainteresowanie, temat do zamknięcia

1 użytkowników online, w tym zalogowanych: 0, gości: 1