【发布时间】:2014-08-13 01:21:28
【问题描述】:
好的,我不知道该怎么做,因为我正在尝试自学 C# 并同时创建一个工作程序。
我有一个 IP 地址列表:
List<IPAddress> addresses
一旦将列表提交到表单,我就会动态地为这些 IP 地址创建一组按钮。
当按钮被创建时,我需要使用什么事件来启动一个函数来做某事?
更多信息: 遍历 IP 地址列表,并为 TableLayoutPanel 中的每个 IP 地址创建按钮。
当在面板内的表单上创建这些按钮时,我想要一个调用的函数,该函数将在以下位置传递 IPAddress:
b.Tag = String.Format("{0}.{1}.{2}.{3}", ba[0], ba[1], ba[2], ba[3]);
并异步 ping 该 IP 地址。
如果 Ping 返回 true,我希望按钮从默认颜色变为绿色。 如果 ping 返回 false,我希望按钮从默认颜色变为红色。
编辑:::::: 我将添加我现在创建 FLP、TBL 和按钮的代码。创建每个按钮后,我想调用一个 ping 函数来 ping 该按钮的 IP 地址,并根据 ping 返回的方式更改其颜色。我不知道如何设置它,也不知道该功能会是什么样子。我试过 b.control.added 但它永远不会被触发。如果我只执行 tbl.control.add 它将触发它没有我需要传递给函数(IPAddress)的信息还是它?就像我说的 C# 的新手,自 2005 年以来没有真正编程过太多,所以远离游戏。
public partial class Form2 : Form
{
public Form2(List<IPAddress> addresses)
{
InitializeComponent();
FlowLayoutPanel flp = new FlowLayoutPanel();
flp.AutoScroll = true;
flp.FlowDirection = FlowDirection.TopDown;
flp.Location = new System.Drawing.Point(12, 67);
flp.AutoSize = true;
flp.Height = 600;
flp.WrapContents = false;
foreach (var ipa in addresses)
{
TableLayoutPanel tlp = new TableLayoutPanel();
tlp.AutoSize = true;
tlp.Dock = DockStyle.Fill;
tlp.RowCount = 0;
tlp.RowStyles.Add(new RowStyle(SizeType.AutoSize));
tlp.ColumnCount = 0;
tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
tlp.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
Label lbl = new Label();
lbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
lbl.Location = new System.Drawing.Point(3, 40);
lbl.Size = new System.Drawing.Size(130, 50);
lbl.Dock = DockStyle.Fill;
lbl.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
Byte[] ba = ipa.GetAddressBytes();
lbl.Text = String.Format("{0}.{1}.{2}.{3}", ba[0], ba[1], ba[2], ba[3]);
tlp.Controls.Add(lbl, 0, 0);
Button b = new Button();
b.Text = "Router\n\r" + String.Format("{0}.{1}.{2}.126", ba[0], ba[1], ba[2]);
b.Tag = String.Format("{0}.{1}.{2}.126", ba[0], ba[1], ba[2]);
b.Dock = DockStyle.Fill;
b.Click += btnRouter_Click;
b.Size = new System.Drawing.Size(150, 50);
b.ControlAdded += btnRouter_ControlAdded;
tlp.Controls.Add(b, 1, 0);
b = new Button();
b.Text = "Switch\n\r" + String.Format("{0}.{1}.{2}.57", ba[0], ba[1], ba[2]);
b.Tag = String.Format("{0}.{1}.{2}.57", ba[0], ba[1], ba[2]);
b.Dock = DockStyle.Fill;
b.Click += btnSwitch_Click;
b.Size = new System.Drawing.Size(150, 50);
b.ControlAdded += btnSwitch_ControlAdded;
tlp.Controls.Add(b, 2, 0);
b = new Button();
b.Text = "Steelhead\n\r" + String.Format("{0}.{1}.{2}.7", ba[0], ba[1], ba[2]);
b.Tag = String.Format("{0}.{1}.{2}.7", ba[0], ba[1], ba[2]);
b.Dock = DockStyle.Fill;
b.Click += btnSteelhead_Click;
b.Size = new System.Drawing.Size(150, 50);
b.ControlAdded += btnSteelhead_ControlAdded;
tlp.Controls.Add(b, 3, 0);
b = new Button();
b.Text = "InPath\n\r" + String.Format("{0}.{1}.{2}.8", ba[0], ba[1], ba[2]);
b.Tag = String.Format("{0}.{1}.{2}.8", ba[0], ba[1], ba[2]);
b.Dock = DockStyle.Fill;
b.Click += btnInPath_Click;
b.Size = new System.Drawing.Size(150, 50);
b.ControlAdded += btnInPath_ControlAdded;
tlp.Controls.Add(b, 4, 0);
b = new Button();
b.Text = "Server\n\r" + String.Format("{0}.{1}.{2}.6", ba[0], ba[1], ba[2]);
b.Tag = String.Format("{0}.{1}.{2}.6", ba[0], ba[1], ba[2]);
b.Dock = DockStyle.Fill;
// b.Click += btnServer_Click;
b.Size = new System.Drawing.Size(150, 50);
b.ControlAdded += btnServer_ControlAdded;
tlp.Controls.Add(b, 5, 0);
b = new Button();
b.Text = "NCAP";
b.Tag = String.Format("{0}.{1}.{2}.", ba[0], ba[1], ba[2]);
b.Dock = DockStyle.Fill;
b.Click += btnNCAP_Click;
b.Size = new System.Drawing.Size(150, 50);
tlp.Controls.Add(b, 6, 0);
flp.Controls.Add(tlp);
}
this.AutoSize = true;
this.Controls.Add(flp);
}
【问题讨论】:
-
为什么需要活动?只需在创建按钮时调用该函数。