C# 在visual C中永久设置一次文本框值#
我是C#编程新手。我正在使用winforms,我正在制作一个小应用程序,我必须将邮件发送到10-15个邮件id。为此,首先我需要在文本框中输入邮件id,然后发送邮件。如果我必须再次发送邮件,则前面输入的邮件ID应显示在文本框中,以便我只需单击“发送邮件”按钮。如果我需要编辑任何邮件id,我将对其进行编辑,从下一次开始,新更新的邮件id应显示在文本框中 如何做到这一点。我需要这个数据库吗。我在创建数据库方面没有任何经验。请帮助我找到简单的解决方案。任何我可以学习的参考或链接C# 在visual C中永久设置一次文本框值#,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我是C#编程新手。我正在使用winforms,我正在制作一个小应用程序,我必须将邮件发送到10-15个邮件id。为此,首先我需要在文本框中输入邮件id,然后发送邮件。如果我必须再次发送邮件,则前面输入的邮件ID应显示在文本框中,以便我只需单击“发送邮件”按钮。如果我需要编辑任何邮件id,我将对其进行编辑,从下一次开始,新更新的邮件id应显示在文本框中 如何做到这一点。我需要这个数据库吗。我在创建数据库方面没有任何经验。请帮助我找到简单的解决方案。任何我可以学习的参考或链接 谢谢在整个应用程序生命
谢谢在整个应用程序生命周期内,还是在重新启动应用程序后,您希望保留您输入的电子邮件ID一次
/// <summary>
/// Serializes an object.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="serializableObject"></param>
/// <param name="fileName"></param>
public void SerializeObject<T>(T serializableObject, string fileName)
{
if (serializableObject == null) { return; }
try
{
XmlDocument xmlDocument = new XmlDocument();
XmlSerializer serializer = new XmlSerializer(serializableObject.GetType());
using (MemoryStream stream = new MemoryStream())
{
serializer.Serialize(stream, serializableObject);
stream.Position = 0;
xmlDocument.Load(stream);
xmlDocument.Save(fileName);
stream.Close();
}
}
catch (Exception ex)
{
//Log exception here
}
}
/// <summary>
/// Deserializes an xml file into an object list
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="fileName"></param>
/// <returns></returns>
public T DeSerializeObject<T>(string fileName)
{
if (string.IsNullOrEmpty(fileName)) { return default(T); }
T objectOut = default(T);
try
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(fileName);
string xmlString = xmlDocument.OuterXml;
using (StringReader read = new StringReader(xmlString))
{
Type outType = typeof(T);
XmlSerializer serializer = new XmlSerializer(outType);
using (XmlReader reader = new XmlTextReader(read))
{
objectOut = (T)serializer.Deserialize(reader);
reader.Close();
}
read.Close();
}
}
catch (Exception ex)
{
//Log exception here
}
return objectOut;
}
//
///序列化对象。
///
///
///
///
public void SerializeObject(T serializableObject,字符串文件名)
{
如果(serializableObject==null){return;}
尝试
{
XmlDocument XmlDocument=新的XmlDocument();
XmlSerializer serializer=新的XmlSerializer(serializableObject.GetType());
使用(MemoryStream stream=new MemoryStream())
{
serializer.Serialize(流,serializableObject);
流位置=0;
加载(流);
xmlDocument.Save(文件名);
stream.Close();
}
}
捕获(例外情况除外)
{
//此处记录异常
}
}
///
///将xml文件反序列化为对象列表
///
///
///
///
公共T反序列化对象(字符串文件名)
{
if(string.IsNullOrEmpty(fileName)){返回默认值(T);}
T objectOut=默认值(T);
尝试
{
XmlDocument XmlDocument=新的XmlDocument();
加载(文件名);
字符串xmlString=xmlDocument.OuterXml;
使用(StringReader读取=新的StringReader(xmlString))
{
类型outType=类型of(T);
XmlSerializer serializer=新的XmlSerializer(outType);
使用(XmlReader=新的XmlTextReader(读取))
{
objectOut=(T)序列化程序。反序列化(读取器);
reader.Close();
}
read.Close();
}
}
捕获(例外情况除外)
{
//此处记录异常
}
退出;
}
这是我使用的演示代码。我用一个按钮读取文件,然后用拆分器拆分文本并显示在文本框中
private void button1_Click(object sender, EventArgs e)
{
Stream file;
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if ((file = openFileDialog.OpenFile()) != null)
{
string fileName = openFileDialog.FileName;
string fileText = File.ReadAllText(fileName);
string[] newText = fileText.Split('Q');
st1name.Text = newText[0];
st1email.Text = newText[1];
st2name.Text = newText[2];
st2email.Text = newText[3];
}
}
}
如果不需要持久化,您可以将邮件ID存储在
列表中
,只需在该列表中追加/编辑即可。如果需要持久化(例如,应用程序重新启动时需要邮件ID),则需要将此数据写入某个位置。一个数据库可能有点过分,但是一个平面文件就可以了。像CSV这样简单的东西就行了。谢谢,我的要求就是你在第二点中提到的那个。我可以从一个文本文件中获取这些电子邮件ID,它会自动显示在文本框中。我一定会搜索它。@anna你必须先阅读文本文件,然后将项目(文本文件的内容)附加到文本框中。也许一个列表框
会是一个更好的控件来管理它?欢迎使用。我在回答中添加了一些示例代码。请检查。您还可以考虑使用SrrWrrror和StrnRe读器来从文本文件中写入/读取。但如今xml更受欢迎。如果数据存储的要求很高,例如需要存储1000的电子邮件ID,您也可以考虑将数据写入DB。也请学习xml序列化。谢谢。我终于通过阅读文件提取了数据。谢谢分享信息。对于面临类似问题的人来说,这肯定是有用的。