Howdy我有一个表单,其中包含标签和文本框,其中将包含程序创建的文件夹的密码。每次他们单击“保存新密码”按钮时,都会在表单上创建一个新的文本框和标签。我想保存密码,以便如果他们对文件夹进行更改,它将询问他们是否要保留更改,然后必须输入该文件夹的密码。我的问题是如何将该密码保存到该文件夹。他们可以根据需要在设置中添加或删除密码。这是我用来创建新文本框的代码。文本框和标签中的文本仅用于测试。 showand仅在此处显示用于测试目的
public partial class Passworddata : Form
{
public List<TextBox> TextBoxes = new List<TextBox>();
public List<Label> labels = new List<Label>();
public Passworddata()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
TextBox tb = new TextBox();
Label labl = new Label();
int i = TextBoxes.Count + 1;
tb.Location = new Point(30,i *30);
labl.Location = new Point(1,i*30);
tb.Width = 30;
tb.Name = "ID" + i;
labl.Text = "hi";
tb.Text = "hello";
TextBoxes.Add(tb);
labels.Add(labl);
Forms.list.Panel1.Controls.Add(tb);
Forms.list.Panel1.Controls.Add(labl);
Forms.list.Show();
}
}
答案 0 :(得分:1)
最好创建一个包含标签和密码的用户控件。然后,不必依赖两个项目列表,您只需拥有一个。
创建一个UserControl并在其上放置一个标签和一个文本框。
您还应该添加一个Changed属性:
public bool PasswordChanged { get; set; } = false;
为密码创建一个公共属性:
public string Password
{
get
{
return(textbox1.Text);
}
set
{
textbox1.Text = value;
Changed = false;
}
}
,其中一个用于目录标签:
public string Directory
{
get
{
return(label1.Text);
}
set
{
label1.Text = value;
}
}
在文本框中,从设计器中订阅TextChanged事件,然后在放置的处理程序代码中:
Changed = true;
在主窗体上放置一个FlowLayoutPanel和一个Add按钮。
然后,当您单击添加按钮时,可以添加密码用户控件的新实例:
public void Add_Click(object sender, EventArgs e)
{
Password pwd = new Password();
flowlayoutpanel1.Controls.Add(pwd);
}
在表单加载事件中,您可以读取文件并创建密码控件:
假设您将目录/密码存储在一个名为PasswordEntry的类中:
public void Form_Load(object sender, EventArgs e)
{
List<PasswordEntry> entries = LoadEntries(@"C:\YourFile");
foreach(PasswordEntry entry in entries)
{
Password pwd = new Password() { Directory = entry.Directory, Password = entry.Password };
flowlayoutpanel1.Controls.Add(pwd);
}
}
然后,您可以完全覆盖文件或仅更新更改的条目来标识并保存更改。
要只获取更改的条目,可以使用一些linq:
foreach(Password pwd in flowlayoutpanel1.Controls.OfType<Password>().Where(p => p.Changed).ToList())
{
SaveChange(pwd.Directory, pwd.Password);
}
假设您有一个名为SaveChange的方法,该方法采用目录字符串和密码字符串,并且知道如何写回文件。
答案 1 :(得分:0)
如果要专门保存控件和数据,我建议以下内容:
当用户添加值时,构建一个像这样的字符串:
string currentEntry = tb.Name + "|" + tb.Text.Replace("|","~") + "|" + labl.Text;
然后只需使用File.AppendAllText
方法,如下所示:
File.AppendAllText("SavedData.dat", currentEntry);
Form.Load
表单的Forms.list
事件Form.Load
Form.Load
的{{1}}事件的方法内部,您将看到类似以下代码的内容:Forms.list