C# 在visual C中永久设置一次文本框值#

C# 在visual C中永久设置一次文本框值#,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我是C#编程新手。我正在使用winforms,我正在制作一个小应用程序,我必须将邮件发送到10-15个邮件id。为此,首先我需要在文本框中输入邮件id,然后发送邮件。如果我必须再次发送邮件,则前面输入的邮件ID应显示在文本框中,以便我只需单击“发送邮件”按钮。如果我需要编辑任何邮件id,我将对其进行编辑,从下一次开始,新更新的邮件id应显示在文本框中 如何做到这一点。我需要这个数据库吗。我在创建数据库方面没有任何经验。请帮助我找到简单的解决方案。任何我可以学习的参考或链接 谢谢在整个应用程序生命

我是C#编程新手。我正在使用winforms,我正在制作一个小应用程序,我必须将邮件发送到10-15个邮件id。为此,首先我需要在文本框中输入邮件id,然后发送邮件。如果我必须再次发送邮件,则前面输入的邮件ID应显示在文本框中,以便我只需单击“发送邮件”按钮。如果我需要编辑任何邮件id,我将对其进行编辑,从下一次开始,新更新的邮件id应显示在文本框中

如何做到这一点。我需要这个数据库吗。我在创建数据库方面没有任何经验。请帮助我找到简单的解决方案。任何我可以学习的参考或链接


谢谢

在整个应用程序生命周期内,还是在重新启动应用程序后,您希望保留您输入的电子邮件ID一次

  • 如果只在整个应用程序中需要文本框值,则可以使用textbox.text属性,可以将其分配给整个应用程序中的某个成员,并在需要时获取它

  • 如果您的要求是即使应用程序重新启动也需要保留数据,则可能需要将输入的值存储在数据库中。但是仅仅为了这个目的而使用数据库可能是没有效率的。您可以考虑为此方案使用文本文件或XML文件。
  • 你可以很容易地在谷歌上找到如何实现上面提到的事情,并获得相同的大量样本

    有关xml序列化/反序列化,请参阅下面的代码。

    /// <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序列化。谢谢。我终于通过阅读文件提取了数据。谢谢分享信息。对于面临类似问题的人来说,这肯定是有用的。