在WinForms中单击按钮时更新textBox.Text默认值

时间:2014-07-07 13:31:17

标签: c# winforms

我有以下代码,并且不知道如何更进一步。我只是想在Form_Load()方法中更新textBox的默认文本,当我在其上写一个新文本,然后点击" Save"按钮。

提前致谢

private void Form7_Load(object sender, EventArgs e)
    {
        textBox1.ForeColor = System.Drawing.Color.Gray;   
        textBox1.Text =                 
    }

    private void textBox1_Click(object sender, EventArgs e)
    {
        textBox1.Clear();
        textBox1.ForeColor = textBox1.ForeColor = SystemColors.WindowText;
    }

    private void buttonSave_Click(object sender, EventArgs e)
    {
        string def = ret();
    }

    private string ret()
    {
        string text = textBox1.Text;
        return text;
    }

2 个答案:

答案 0 :(得分:2)

要在应用程序重新启动之间保存/恢复值,最好使用.NET设置机制。转到项目的属性,然后单击“设置”选项卡。添加一些设置,例如“TextBoxDefaultValue”,确保其类型为String并标记为User设置。

在您的代码中,您可以访问此设置

textBox1.Text = Properties.Settings.Default.TextBoxDefaultValue;

要更改并保留设置,请使用:

Properties.Settings.Default.TextBoxDefaultValue := textBox1.Text;
Properties.Settings.Default.Save();

此设置现在基于每个用户保留。

所以在你的代码中会看到:

private void Form7_Load(object sender, EventArgs e)
{
    textBox1.ForeColor = System.Drawing.Color.Gray;   
    textBox1.Text = Properties.Settings.Default.TextBoxDefaultValue;
}

private void buttonSave_Click(object sender, EventArgs e)
{
    Properties.Settings.Default.TextBoxDefaultValue = ret();
    Properties.Settings.Default.Save();
}

顺便说一句:你应该考虑一下如果用户没有通过点击它进入文本框会发生什么,而是通过标签进入它。也许您应该查看OnEnterOnLeave事件......

答案 1 :(得分:0)

TextBox.Text没有默认值,或者如果您愿意,在创建控件时它是空白的。要在其中设置默认值,您需要实现它(好吧,通过设置TextBox.Text)并选择Form.Load并不是一个糟糕的选择。

要在应用程序启动之间保持默认值,您必须以某种方式将此值保存到某个位置:文件,数据库,注册表,服务器等。请参阅this问题。

我自己使用简单的XmlSerializer

public class MyData
{
    public string Text; // to save textbox text, could be public field or property
}

// to save
var data = new MyDate() { Text = textBox.Text };
using (var stream = new FileStream("somefile", FileMode.OpenOrCreate))
{
    var serializer = new XmlSerializer(data.GetType()); // or typeof(MyData)
    serializer.Serialize(fileStream, data);
}

// to load
using (var stream = new FileStream("somefile", FileMode.Open, FileAccess.Read))
{
    var serializer = new XmlSerializer(typeof(MyData));
    var data = serializer.Deserialize(stream) as MyData;
    textBox.Text = data.Text;
}