c# - C# - 将形状从文本文件加载到 PictureBox 中,其中包含描述每个形状的数据
问题描述
我有完美的工作代码来加载和保存包含形状类型的文本文件中的形状(我使用称为 shapetype 的枚举)、x1、y1(初始鼠标按下位置)坐标和 x2、y2(最终位置一旦鼠标被拖动到某处并释放左键,鼠标光标)。该数据还将形状的颜色存储为一个 rgb int 和一个真/假值,以判断该形状是填充为实心还是只是轮廓。
我唯一要问的是,我如何才能拥有完全相同的东西,但在我的文本文件的一行上的 1 个形状的所有数据仍然能够加载它。我知道如何在一行上保存数据,但我不知道如果每个形状的所有内容都在一行上,我将如何加载数据......
现在的代码是:
private void loadCanvas(List<APShape> shapeList)
{
shapeList.Clear();
string line = "";
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Shape Data Files | *.shapes";
if (open.ShowDialog() == DialogResult.OK)
{
Stream s = File.Open(open.FileName, FileMode.Open);
StreamReader sr = new StreamReader(s);
while (line != null)
{
line = sr.ReadLine();
if (line != null)
{
shapeList.Add(ObjectFromTxt(line));
shapeList[shapeList.Count - 1].setColor(Color.FromArgb(int.Parse(sr.ReadLine())));
shapeList[shapeList.Count - 1].setX1(int.Parse(sr.ReadLine()));
shapeList[shapeList.Count - 1].setY1(int.Parse(sr.ReadLine()));
shapeList[shapeList.Count - 1].setX2(int.Parse(sr.ReadLine()));
shapeList[shapeList.Count - 1].setY2(int.Parse(sr.ReadLine()));
shapeList[shapeList.Count - 1].setSolid(string2bool(sr.ReadLine()));
shapeList[shapeList.Count - 1].setPenWidth(float.Parse(sr.ReadLine()));
}
}
sr.Close();
canvas.Invalidate();
}
}
包含形状数据的文本文件的外观是: 当前文件格式
解决方案
最终结果
private void saveCanvas()
{
SaveFileDialog save = new SaveFileDialog();
save.DefaultExt = ".shapes";
save.Filter = "Shapes File (*.shapes) |*.shapes";
if (save.ShowDialog() == DialogResult.OK)
{
File.Delete(save.FileName);
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, NullValueHandling = NullValueHandling.Ignore };
File.WriteAllText(save.FileName, JsonConvert.SerializeObject(shapes, shapes.GetType(), settings));
}
}
private void loadCanvas()
{
List<APShape> shapeList = new List<APShape>();
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Shapes File (*.shapes) |*.shapes";
if (open.ShowDialog() == DialogResult.OK)
{
shapes.Clear(); /* Clear canvas to make sure we are starting blank */
canvas.Invalidate();
var json = File.ReadAllText(open.FileName);
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Objects, NullValueHandling = NullValueHandling.Ignore };
shapeList = JsonConvert.DeserializeObject<List<APShape>>(json, settings);
foreach (var shape in shapeList)
{
shapes.Add(shape);
}
canvas.Invalidate();
}
}
推荐阅读
- windows - Read-Host 总是以冒号结尾
- python-3.x - 嵌套文件夹结构中的 excel 工作表中的递归数据抓取
- java - Spring Boot以自己的对象为键返回Map的问题
- python - 在熊猫中附加带有 value_counts() 的列
- python - 将 Jupyter 笔记本作为模块导入,但允许检查
- java - 如何从java中的字节数组中获取每个字节的8位?
- wordpress - AWS 中的 GoDaddy 域,用于 Wordpress 应用程序的 SSL 问题
- javascript - D3.js Force Directed Graph with Json - 创建图指定到所有节点的链接距离
- swift - Firestore - 创建集合的副本
- javascript - 在 Javascript 中切换 [吐出相同的值]