C#:在FlowLayoutPanel中使用backgroundworker更改矩形的颜色



我试着让我的软件显示一个绿色或红色的正方形,这取决于ip地址是否有效,当然所有的都在FlowLayoutPanel(ca_imp(中,在我根据地址数创建一个正方形之前,我将在第二个FlowLayoutPanel中添加地址(listeImprimantes(。

private void RdFichierXml()
{
int i = 0;
XmlDocument xmlDoc = new XmlDocument(); // Create an XML document object
xmlDoc.Load("imprimante.xml"); // Load the XML document from the specified file
// Get elements
girlNom = xmlDoc.GetElementsByTagName("nom");
girlIp = xmlDoc.GetElementsByTagName("ip");
girlRemarques = xmlDoc.GetElementsByTagName("remarques");
// Display the results
for (i = 0; i < girlIp.Count; i++)
{
buttons(girlIp[i].InnerText, girlNom[i].InnerText, girlRemarques[i].InnerText);
buttons1(i, girlIp[i].InnerText);
}
}
private void buttons(string ip, string name, string remarque)
{
Panel Case = new Panel();
Case.Font = new System.Drawing.Font("Mont", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
Case.Name = "Case";
Case.Size = new System.Drawing.Size(234, 49);
Case.Text = name + "rnIP : " + ip + "rnREMARQUE : " + remarque + "rn"; ;
Case.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
listeImprimantes.Controls.Add(Case);
}
private void buttons1(int i, string ip)
{
Panel Case1 = new Panel();
Case1.Name = "Case_color" + i;
Case1.Size = new System.Drawing.Size(16, 49);
Case1.TabIndex = i;
Case1.BringToFront();
Case1.BackColor = Color.Gray;

ca_imp.Controls.Add(Case1);
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < girlIp.Count; i++)
{
/*if (check(girlIp[i].InnerText) == 1) //check is a funtion that return 1 if the ip is valid or 0 if not
{
?.BackColor = Color.Green;
}
else if (check(girlIp[i].InnerText) == 0)
{
?.BackColor = Color.Red;
}*/
}
}

我能在不冻结我的窗户的情况下用背景工人或其他东西换颜色吗。。。

有很多方法可以做到这一点,这里有一种:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < girlIp.Count; i++)
{
int result = check(girlIp[i].InnerText);
String cltName = "Case_color" + i;
Panel pnl = this.Controls.Find(ctlName, true).FirstOrDefault() as Panel;
if (pnl != null)
{
pnl.Invoke((MethodInvoker)delegate () {
pnl.BackColor = (result == 1) ? Color.Green : Color.Red;
});
}
}
}

最新更新