C# 在c语言中读取并保存表单的位置
我想读取文本文件的位置,所以当我重新打开表单时,它应该在我上次关闭它的位置。有办法吗 我要写入文本文件的代码:C# 在c语言中读取并保存表单的位置,c#,.net,winforms,C#,.net,Winforms,我想读取文本文件的位置,所以当我重新打开表单时,它应该在我上次关闭它的位置。有办法吗 我要写入文本文件的代码: string path = Directory.GetCurrentDirectory() + @"\config\Loc\dateloc.txt"; if (!File.Exists(path)) { File.Create(path); } try { System.IO.File.WriteAllBytes(path, new byte[0
string path = Directory.GetCurrentDirectory() + @"\config\Loc\dateloc.txt";
if (!File.Exists(path))
{
File.Create(path);
}
try
{
System.IO.File.WriteAllBytes(path, new byte[0]);
StreamWriter writer = new StreamWriter(path, true);
string overlayloc = this.Location.ToString();
writer.WriteLine(overlayloc.ToString());
writer.Dispose();
writer.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
试着改变
File.Create(path);
到
从构造器中的文件中获取值如果文件存在读取数据获取x y位置并分配到位置抱歉第一眼看不懂您的问题我希望现在就可以了
public Form1()
{
InitializeComponent();
string path = Environment.CurrentDirectory + @"\config\dateloc.txt";
if (File.Exists(path))
{
string loc = File.ReadAllText(path);
this.Location = new Point(Int32.Parse(loc.Split(',')[0].Replace("{X=", "")), Int32.Parse(loc.Split(',')[1].Replace("Y=", "").Replace("}\r\n","")));
}
}
根据您的示例和方法,您最初可能寻找的答案是@sai kiran提供的 也就是说,您正在执行
Form.Location
的ToString()
(这是一种System.Drawing.Point
类型)并将其写入方法中的文件中。注意:ToString()
的输出字符串是(X=?,Y=?)
,其中?
是表示值的数字字符
考虑到您正以这种方式存储位置点值(而不是点的序列化形式),并且为了获得所需的结果,您需要读取该文件并解析\处理字符串表示的值,从中构造一个新的点类型实例,然后在显示表单之前将其分配到位置
没有标准的点。解析到点的字符串表示形式的方法(我知道),因此您必须通过字符串操作和外推来处理它。注意:如果它表示为“0,0”
,则可以将其反序列化为点
类型实例
话虽如此,您可以通过使用应用程序设置和控件属性绑定来完成此任务,而无需专门实现File\Stream reads\writes,也无需解析字符串的外推值
实际上,使用应用程序设置和属性绑定是我推荐的方法和答案。我将提供一些关于这方面的指导:
将设置定义为用户的范围内的系统.Drawing.Point
(例如“Form1LocationPointUserSetting”
)。由于点
是一种值类型,它将有一个默认值-(0,0)
您可以通过几种方式定义设置,但最简单的方法可能是使用IDE的设置设计器工具(它将生成代码并更新App.config)
保存设置设计器更改(使用CTRL+S保存全部)后,您将能够以编程方式在代码中引用设置属性名称,并在控件属性绑定中使用它(因为它与属性类型相关)。注意:并非所有控件属性都以这种方式支持绑定,并且一些支持绑定的控件属性可能不会使用INotifyProperty
更改实现\update
最后,您需要保留对设置所做的任何更改。因此,您将在某些事件期间调用Property.Settings.Default.Save()
。(例如表单关闭事件。)
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
FormClosing+=Form1\u FormClosing;
}
私有作废Form1\u FormClosing(对象发送方,FormClosingEventArgs e)
{
//保存设置
Properties.Settings.Default.Save();
}
}
为什么要开始在该文件中写入一个字节?如果文件不存在,StreamWriter也会创建该文件。最后,您在追加模式下写入,您在该文件中写入的位置是否比当前表单中的位置多?首先,您必须确定\澄清此设置是特定于应用程序、计算机还是用户,然后还要确定它是否特定于控件。基本上,什么范围?visual-studio-2019
← 除非您对此特定版本有特定问题,否则不要使用此标记。这是否回答了您的问题?以及有关CodeProject使用应用程序设置和Visual Studio RAD设计器的教程:是的。。尽管这可能不是最好的\推荐的方法,但这是一个直截了当的答案(考虑到OP编写内容的实现)。本质上,它解决\回答了如何以及在何处解析this.Location.toString()
,因为它是写入文件的。
public Form1()
{
InitializeComponent();
string path = Environment.CurrentDirectory + @"\config\dateloc.txt";
if (File.Exists(path))
{
string loc = File.ReadAllText(path);
this.Location = new Point(Int32.Parse(loc.Split(',')[0].Replace("{X=", "")), Int32.Parse(loc.Split(',')[1].Replace("Y=", "").Replace("}\r\n","")));
}
}