基于C#中的列表动态添加和定位表单项目#
问题描述:
所以我试图显示我的表单上的活动列表。基于C#中的列表动态添加和定位表单项目#
Activity类的样子:
class Activity
{
public int ID { get; set; }
public int IncidentID { get; set; }
public string Description { get; set; }
public int TimeSpent { get; set; }
public Activity(int iD, int incidentID, string description, int timeSpent)
{
this.ID = iD;
this.IncidentID = incidentID;
this.Description = description;
this.TimeSpent = timeSpent;
}
}
我的最终目标是有这样的事情实物模型:
了一系列的活动,但是,选择在运行时可以改变(因为它基于Incident
,将显示多少活动。)
我已经拿出了这个foll由于代码动态填充GUI:
List<Activity> activities = new List<Activity>();
activities.Add(new Activity(1, 2, "Mail client", 5));
activities.Add(new Activity(2, 2, "Fix problem", 5));
activities.Add(new Activity(3, 2, "Mail client for success", 10));
activities.Add(new Activity(4, 2, "Mail client", 5));
int n = activities.Count();
Label[] labels = new Label[n];
TextBox[] textboxes = new TextBox[n];
CheckBox[] checkboxes = new CheckBox[n];
for (int i = 0; i < n; i++)
{
labels[i] = new Label();
labels[i].Text = activities.ElementAt(i).Description.ToString();
textboxes[i] = new TextBox();
textboxes[i].Text = activities.ElementAt(i).TimeSpent.ToString();
checkboxes[i] = new CheckBox();
}
我的第一个问题是,我们如何这些组件添加到一个GUI?我会有另一个单独的for
-loop与布局(或在我的情况下,group box
)来存储项目?
其次,我怎么可能将复选框与活动链接。这是因为在稍后阶段,我将不得不总结检查其复选框的活动时间。但他们目前是否与一项活动相关联?
感谢
答
你可以做到以下几点:
1.在Activities
类具有静态StartX
和StartY
保持控制坐标和写入像下面DrawToForm
方法:
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public class Activity
{
public int ID { get; set; }
public int IncidentID { get; set; }
public string Description { get; set; }
public int TimeSpent { get; set; }
public static int StartX { get; set; } = 10;
public static int StartY { get; set; } = 10;
public Activity(int iD, int incidentID, string description, int timeSpent)
{
this.ID = iD;
this.IncidentID = incidentID;
this.Description = description;
this.TimeSpent = timeSpent;
}
public void DrawToForm(Form f)
{
var label = new Label();
var textBox = new TextBox();
var checkBox = new CheckBox();
label.Text = Description.ToString();
textBox.Text = TimeSpent.ToString();
label.Left = StartX;
label.Top = StartY;
StartX += 100;// Move position to right
textBox.Left = StartX;
textBox.Top = StartY;
StartX += 150;// Move position to right
checkBox.Left = StartX;
checkBox.Top = StartY;
StartX = 10;// Reset to start
StartY += 50;// Move position to down
f.Controls.Add(label);
f.Controls.Add(textBox);
f.Controls.Add(checkBox);
}
}
}
-
现在在
Form
的构造函数或无论如何你需要你可以这样做:public Form1() { InitializeComponent(); List<Activity> activities = new List<Activity>(); activities.Add(new Activity(1, 2, "Mail client", 5)); activities.Add(new Activity(2, 2, "Fix problem", 5)); activities.Add(new Activity(3, 2, "Mail client for success", 10)); activities.Add(new Activity(4, 2, "Mail client", 5)); foreach(Activity a in activities) { a.DrawToForm(this); } }
我还没有写标题部分的标签部分,因为它不是动态的。
非常感谢!我想知道“CheckBox”问题,在“Activity”类中添加一个CheckBox作为成员是否更好? –
@KahnKah如果您将该复选框值保存到数据库或文件系统,然后使用“活动”类从那里加载它,那么您当然需要为该复选框设置属性或字段。 –
非常感谢S.Petrosov –