Изменить TextBox BackColor во время выполнения - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть 4 текстовых поля и 1 кнопка. Когда кнопка нажата, она пингует 4 IP-адреса, затем меняет цвет текстовых полей в соответствии со статусом пинга.

Что я хочу сделать, так это то, что при нажатии кнопки все текстовые поля изменяют цвет на белый до начала пинга.

Я написал следующий код, но он не работал.

Мои коды:

public void Clear1()
        {
            txtHKB1.BackColor = Color.Yellow;
            txtHKB2.BackColor = Color.Yellow;
            txtHKB3.BackColor = Color.Yellow;
            txtHKB4.BackColor = Color.Yellow;
        }

        public void Clear2()
        {
            txtHKB1.Text = "";
            txtHKB2.Text = "";
            txtHKB3.Text = "";
            txtHKB4.Text = "";
        }

    private void btnConnect_Click(object sender, EventArgs e)
            {
                //b.Baglan("192.168.20.50","9050");
            }

            private void btnSistemIzle_Click(object sender, EventArgs e)
            {
                Thread th1 = new Thread(new ThreadStart(Clear1));
                Thread th2 = new Thread(new ThreadStart(Clear2));

                th1.Start();
                th2.Start();

                SistemIzle("192.168.20.60");            
                SistemIzle("192.168.20.80");
                SistemIzle("192.168.20.100");
                SistemIzle("192.168.20.120");

                counter2++;
            }

            public void SystemAnalyse(string ip)
            {
                try
                {
                    IPAddress ipAddress = Dns.GetHostEntry(ip).AddressList[0];

                    //for (int i = 0; i < 3; i++)
                    //{
                    System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
                    System.Net.NetworkInformation.PingReply pingReply = ping.Send(ipAddress);

                    counter++;

                    //MessageBox.Show(pingReply.Buffer.Count().ToString() + pingReply.RoundtripTime.ToString()
                    //        + pingReply.Options.Ttl.ToString() + pingReply.Status.ToString());

                        //System.Threading.Thread.Sleep(100);
                    //}

                }

                catch
                {
                    //MessageBox.Show("Başarısız Girişim!");
                    fail++;
                }

                if (counter % 4 == 1 && fail == 0)
                {
                    txtHKB1.BackColor = Color.Green;
                    txtHKB1.Text = "                         Yayinda";
                }

                if (counter % 4 == 1 && fail == 1)
                {
                    fail = 0;
                    txtHKB1.BackColor = Color.Red;
                    txtHKB1.Text = "                         Kapalı";
                }

                if (counter % 4 == 2 && fail == 0)
                {
                    txtHKB2.BackColor = Color.Green;
                    txtHKB2.Text = "                         Yayinda";
                }

                if (counter % 4 == 2 && fail == 1)
                {
                    fail = 0;
                    txtHKB2.BackColor = Color.Red;
                    txtHKB2.Text = "                         Kapalı";
                }

                if (counter % 4 == 3 && fail == 0)
                {
                    txtHKB3.BackColor = Color.Green;
                    txtHKB3.Text = "                         Yayinda";
                }

                if (counter % 4 == 3 && fail == 1)
                {
                    fail = 0;
                    txtHKB3.BackColor = Color.Red;
                    txtHKB3.Text = "                         Kapalı";
                }

                if (counter % 4 == 0 && fail == 0)
                {
                    txtHKB4.BackColor = Color.Green;
                    txtHKB4.Text = "                         Yayinda";
                }

                if (counter % 4 == 0 && fail == 1)
                {
                    fail = 0;
                    txtHKB4.BackColor = Color.Red;
                    txtHKB4.Text = "                         Kapalı";
                }
            }

Что я делаю не так? Мои наилучшие пожелания ...

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Этот код не имеет особого смысла. Вы создаете две темы, чтобы изменить цвет элементов управления, принадлежащих другой теме? Это неправильно по многим причинам:

  1. Зачем вам нужно менять цвет параллельно?
  2. Вы все равно не можете сделать это так, потому что только поток пользовательского интерфейса может обновлять элементы управления, если вы не используете Control.Invoke или Control.BeginInvoke для пересылки обновлений из других потоков, но я не вижу смысла в вашем случае.

Я предлагаю вам просто сделать это:

        private void btnSistemIzle_Click(object sender, EventArgs e)
        {
            txtHKB1.BackColor = Color.Yellow;
            txtHKB2.BackColor = Color.Yellow;
            txtHKB3.BackColor = Color.Yellow;
            txtHKB4.BackColor = Color.Yellow;

            txtHKB1.Text = "";
            txtHKB2.Text = "";
            txtHKB3.Text = "";
            txtHKB4.Text = "";


            SistemIzle("192.168.20.60");            
            SistemIzle("192.168.20.80");
            SistemIzle("192.168.20.100");
            SistemIzle("192.168.20.120");

            counter2++;
        }
1 голос
/ 03 февраля 2012

Если я правильно понимаю, что вы используете WinForm, и текстовые поля меняются соответственно при пинге?

Чтобы они установили белый цвет перед тем, как вы пингуете, вызов этого кода в начале метода должен работать. Вы не должны были по отдельности нарезать нить. Вы по каким-то причинам работаете с потоками?

txtHKB1.BackColor = Color.White;
txtHKB2.BackColor = Color.White;
txtHKB3.BackColor = Color.White;
txtHKB4.BackColor = Color.White;

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

private void colorchange()
{
    txtHKB1.BackColor = Color.White;
    txtHKB2.BackColor = Color.White;
    txtHKB3.BackColor = Color.White;
    txtHKB4.BackColor = Color.White;
}

и в начале вашей второй кнопки просто позвоните.

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