2012-02-03 110 views
0

我有4个文本框和1个按钮。 当按下按钮时,它会ping 4个IP地址,然后根据ping状态更改文本框颜色。运行时更改TextBox BackColor

我想要做的是,当按下按钮时,所有文本框的背景颜色在ping开始之前变为白色。

我写了下面的代码,但没有奏效。

我的代码:

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ı"; 
       } 
      } 

我做错了什么? 我最好的问候...

+0

的文本框,如果它们是什么颜色不是白色的? – LarsTech 2012-02-03 14:04:04

回答

5

此代码没有多大意义。你生成两个线程只是为了改变不同线程拥有的控件的颜色?这是错误的,原因很多:

  1. 为什么你需要平行改变颜色?
  2. 无论如何,你不能这样做,因为只有UI线程可以更新控件,除非你使用Control.InvokeControl.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

如果我理解正确,你使用的是WinForm,并且当你ping的时候texboxes会做相应的改变?

要让它们在ping方法开始前调用此代码之前设置为白色,应该可以工作。你不应该分开线程。你是否因任何特定原因进行线程?

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(); 
+0

嗨,他们不改变颜色,当我在方法的开始写... – 2012-02-03 13:50:31

+0

@Un_NatMenDim当我在方法的开始使用该代码时,它适用于我。你想让它们在按下按钮时变成白色?并保持这种方式,直到他们收到ping状态? – sealz 2012-02-03 13:51:40

+0

是的,但我没有其他的按钮,只有一个来处理它... – 2012-02-03 14:05:06