是否可以以编程方式向WinForm添加一些控件?

时间:2009-07-08 13:46:51

标签: .net winforms

我有一个非常简单的rectangluar WinForm,它使用计时器来检查许多文件的最终内容。工作正常。

现在,要检查的文件列表是动态的。可能是3.可能是30.它取决于数据库中的某些值,我定期检查。那也没关系。

我想做的就是在我的winform上直观地看待它。对于每个文件,都有一个红色圆圈。当文件被“检查”时,将该圆圈显示为绿色。一旦完成,再次变红。

  1. 我如何以编程方式显示此圈的一行(或多行)?我知道表格的宽度,如果有帮助的话。请记住,如果我将它们拖放到设计器上,我不知道要显示多少。我需要能够动态地执行此操作:)
  2. 如何将此圈从红色切换/翻转为绿色,然后将绿色切换为红色?
  3. 圈子是什么?我在MSPaint中制作的自定义图像(例如png)并将其作为嵌入资源添加到项目中?
  4. 干杯!

5 个答案:

答案 0 :(得分:9)

  1. 创建每个控件对象,设置其属性,然后将其添加到父容器的Controls集合(例如表单)。您可以(a)根据添加的最后一个控件手动计算每个新控件的坐标,或者(b)将它们放在FlowLayoutPanel内。
  2. 您应该能够在需要时更改控件的相关属性值(取决于您选择如何实现圆圈)。
  3. 您可以按照建议使用图片资源,也可以使用Graphics对象自行绘制。

答案 1 :(得分:1)

是的,只需创建控件(新)并将其添加到表单中。请参阅此处link以及示例或两个。

你们其他人的问题非常开放 - 有很多方法可以做你想做的事。

  • 为每个项目动态绘制一个圆圈(通过GDI +)(实际上每个项目确实是一个控件,它需要接受用户输入)
  • 为每个项目创建一个控件
  • 交换位图的用户控件
  • 使用进度条控件

答案 2 :(得分:1)

实现自定义控件并执行以下操作:

SuspendLayout();

MyCircleControl circle = new MyCircleControl ();

// Set properties
circle.Location = new Point(0,0);
circle.Color = Color.Red;

Controls.Add(circle );

ResumeLayout(false);

这实际上是设计师正在做的事情。看一下Designer.cs文件。

答案 3 :(得分:1)

在这种情况下,我创建了一个“模型”控件,它具有您要添加的控件的所有属性。例如,红点,其大小和其他属性已设置。然后将其设置为不可见或使其不可见。然后,当您需要动态创建控件时,克隆该模型控件,并设置其位置(并在需要时使其可见),然后将其添加到窗体控件集合

答案 4 :(得分:0)

由于你说文件列表无论如何都保存在数据库中,我会在设计模式下向表单添加一个datagridview。这个dgv将使用带有文件的表作为其数据源,从而动态创建行。我还要向dgv或表本身添加一列,以保存文件是否被读取的布尔/位。然后,这将显示为dgv中的列。从那里你将获得正在读取的文件的dgv行,并将布尔列的图像更改为您在您喜欢的图像编辑器中创建的绿色或红色圆圈。