我的問題是我有多個表單控制元件,我需要根據我的代碼輸出來制作可見/不可見/更改文本。
顯然這很容易實作,但是由于我的設定方式,代碼非常長。
我有 3 個包含紅色、綠色和橙色“光”的影像框。
當啟動 ping 操作(按鈕單擊或計時器)時,所有控制元件都需要設定如下:
// ping 1
redLight1.Visible = true;
greenLight1.Visible = false;
orangeLight1.Visible = false;
status_Lbl1.Text = "Initiated...";
我需要這樣做 9 次,而且重復了很多次的代碼對我來說看起來有點笨拙。
我有一個 ping 物件,它在 x 時間內每秒發送一個 ping。如果所有 ping 都成功發送和接收,則包含綠色圓圈的影像框將變為可見greenLight1.Visible = true,而其他所有 ping 均已設定redLight1.Visible = false,orangeLight1.Visible = false等等。
我有 9 組這樣的“紅綠燈”,每組都有不同的 IP 被 ping 和不同的結果。
我覺得必須有一種方法可以迭代地更改每個框的值,因為它們都遵循相同的命名約定,只是末端有一個不同的數字,對應于它們所代表的 ping 物件。
這是我想要實作的更直觀的想法。
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// int counter = 0
if (e.Cancelled == true)
{
status_Lbl1.Text = "Cancelled";
}
else if (e.Error != null)
{
status_Lbl1.Text = "Error: " e.Error.Message;
}
else
{
foreach (Ping pingObj in pings)
{
if (pingObj.SuccessfulPings == 0)
{
Debug.WriteLine("Ping Object: " pingObj.Fqdn " failed to successfully ping");
// greenLight[i].Visible = false;
// orangeLight[i].Visible = false;
// redLight[i].Visible = true;
// counter
}
else if (pingObj.FailedPings != 0)
{
Debug.WriteLine("Ping Object: " pingObj.Fqdn " failed to successfully ping: " pingObj.FailedPings " times.");
// greenLight[i].Visible = false;
// orangeLight[i].Visible = true;
// redLight[i].Visible = false;
// counter
}
else
{
Debug.WriteLine("Ping Object: " pingObj.Fqdn " succesfully pinged: " pingObj.SuccessfulPings " times.");
// greenLight[i].Visible = false;
// orangeLight[i].Visible = false;
// redLight[i].Visible = false;
// counter
}
}
}
}
這是創建/使用 ping 物件的方法,以防萬一
private async void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
try
{
// Create background worker
BackgroundWorker worker = (BackgroundWorker)sender;
// Write to log file
await file.WriteAsync("Starting job...\n");
await file.WriteAsync("Requested amount of pings: " count "\n");
// Create date object for logs
DateTime localDate = DateTime.Now;
for (int i = 0; i < count; i )
{
// Create ping objects
System.Net.NetworkInformation.Ping pinger = new System.Net.NetworkInformation.Ping();
PingReply pingReply;
try
{
foreach (Ping pingObj in pings)
{
try
{
pingReply = pinger.Send(pingObj.IpAddress);
// Write log file
await file.WriteLineAsync(localDate.TimeOfDay " | Friendly Name " pingObj.FriendlyName " | Ping: " pingReply.Address " | Status " pingReply.Status " | Time: " pingReply.RoundtripTime);
if (pingReply.Status.ToString().Contains("Success"))
{
pingObj.SuccessfulPings = 1;
}
else // Unsuccessful ping has been sent
{
pingObj.FailedPings = 1;
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
}
wait(1000);
}
catch (Exception b)
{
Debug.WriteLine(b.ToString());
}
}
}
catch (Exception a)
{
Debug.WriteLine(a.ToString());
}
}
uj5u.com熱心網友回復:
您可以Controls.Find()通過以下選項使用和“按名稱搜索” recurse:
Control ctl = this.Controls.Find("greenLight" counter, true).FirstOrDefault() as Control;
if (ctl != null) {
ctl.Visible = false;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/497727.html
