【发布时间】:2019-12-28 09:37:46
【问题描述】:
我有一堆序列化的目标文件,其中包含与我们拥有的传感器网络相关的信息。
我正在尝试加载每个文件,并在文件中包含一个变量(传感器名称的缩写)加载并显示在按钮上。
然后我需要用户能够单击该按钮并编辑该对象的属性。我很确定后面的部分我可以轻松完成。
我正在努力做的是弄清楚如何构建这些按钮的网格,每个按钮之间有适当的间距。
这是我目前所拥有的
private Dictionary<string, Point> buttonGrid = new Dictionary<string, Point>();
public void LoadNLDNSensors()
{
DirectoryInfo d = new DirectoryInfo(filepath);
string[] files = Directory.GetFiles(filepath);
if (files.Length == 0)
{
MessageBox.Show("Couldn't find sensor files!", "Failure",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
foreach (var file in d.GetFiles("*.sensor"))
{
IFormatter formatter = new BinaryFormatter();
NLDNSensor newSensor = new NLDNSensor();
newSensor = newSensor.LoadSensorFromFile(file);
string _brief = newSensor.Brief;
Button bu = new Button();
this.Controls.Add(bu);
bu.Size = new Size(30, 40);
bu.Location = new Point(1,1);
int x, y;
x = 1;
y = 1;
// I think my logic needs to go here just not
// sure how or what type of algorithm I need
buttonGrid.Add(_brief, new Point(x,y));
bu.Text = _brief;
bu.BackColor = Color.Aqua;
bu.Visible = true;
}
return;
}
这将显示我正在尝试显示按钮的 WinForm: https://imgur.com/a/s267yrm
我想将每个文件分隔至少 2 个像素,所以我想我们将按顺序将每个下一个文件的 x, Point 值增加 2。问题是当我们到达窗口的宽度时,我不确定如何让它从下一行开始。
【问题讨论】:
-
试试 FlowLayoutPanel!
-
在以下帖子中查看我的解决方案:stackoverflow.com/questions/37165402/… 不要使用流程图。它不支持和很多属性。最好使用常规面板创建自己的面板
-
@jdweng:FLP 很好。你到底有什么不能去工作的?
-
FLP 似乎完全符合我的需要,我只需要手动按字母顺序对按钮进行排序,我认为(因为传感器文件是通过它们的 ID 保存的,它是一个数字),即:12 .sensor 就是其中之一。非常感谢您的建议!
-
@Taw:只有面板的最基本功能可以用 FLP 完成。使用直面板可以做 100 件事情,而使用 FLP 则无法做到。只需比较 FLP 和面板的属性,您就会看到。