在 C# 中为表单创建保存按钮
Posted
技术标签:
【中文标题】在 C# 中为表单创建保存按钮【英文标题】:Creating a save button for a Form in C# 【发布时间】:2012-10-23 09:44:57 【问题描述】:我最近在 Visual Studio 中创建了一个数据库。我有两个表格,第一个表格显示一个表格。第二个窗体连接到第一个表并在设计视图中显示信息。
当用户更改设计视图中的数据时,如果他们单击保存,则在关闭第二个表单时,更改的信息会在原始表单上更新。
但是,如果他们关闭表单而不保存,则原始表单上的信息保持不变。
我想创建一个保存按钮,以清楚地向用户显示他们必须保存他们在设计视图中所做的任何更改。
以前有人创建过“保存”按钮吗?对于连接到另一个表单的表单,而不是文件?
【问题讨论】:
我希望它在关闭时自动保存 我不能只使用 this.Save();? 【参考方案1】:使用 FormClosing 事件怎么样?
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
if (MessageBox.Show("Do you want to save changes to your table?", "My Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
e.Cancel = true;
【讨论】:
【参考方案2】:不确定我是否正确理解了你的问题,但我整理了这个小例子来尝试复制你的问题。
这里是主要形式:
主窗体由一个数据网格视图(显示可能来自数据库的数据)和一个编辑按钮组成,该按钮用于打开第二个窗体,该窗体将用于编辑网格中所选项目的 DataValue看法。 Form2(编辑表单)如下所示:
如您所见,我在 Form2 上放置了一个保存按钮和一个取消按钮。我将 Form2 用作模式对话框表单(因此在 Form2 打开时无法更改测试表单)。这意味着我可以设置 Save 和 Cancel 按钮的 DialogResult 属性,并使用它们来通知 TestForm 要做什么。保存按钮设置为DialogResult = OK
,取消按钮设置为DialogResult = Cancel
。
我还向 From2 添加了一个特殊的公共属性,可用于获取和设置数据。在我的情况下,这只是一个简单的字符串,但在更高级的情况下,这将获取并设置特殊类型的对象,或者可能是表中的数据行。这是我的财产:
public string DataValue
get return textBox1.Text;
set textBox1.Text = value;
现在,在 TestForm 上的“编辑”按钮后面,我有以下事件代码:
private void EditButton_Click(object sender, EventArgs e)
if (dataGridView1.SelectedRows.Count != 1) return;
string data = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
// show the form as a modal dialog box while editing.
Form2 editForm = new Form2();
editForm.DataValue = data;
if (editForm.ShowDialog() == DialogResult.OK)
// If the user clicks Save then we want to update the datagrid
// (and eventually the database).
dataGridView1.SelectedRows[0].Cells[1].Value = editForm.DataValue;
如果您需要 Form2 的非模态版本,那么您将无法在编辑按钮事件中完成所有这些操作。相反,您将不得不生成一个新的编辑表单并处理它的关闭事件。然后,您需要将更新网格视图的代码移动到此关闭事件中。每个生成的编辑表单都需要记住它正在编辑的数据行,以便关闭事件可以更新正确的行。
我希望这会有所帮助。
【讨论】:
【参考方案3】:所以如果你想保存它,你可以使用这个代码作为保存按钮
// Displays a SaveFileDialog so the user can save the Image
// assigned to Button2.
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "html|*.html|lua file|*.lua|text
document|*.txt|video|*.mp4|image|*.jpg";
saveFileDialog1.Title = "save project";
saveFileDialog1.ShowDialog();
// If the file name is not an empty string open it for saving.
if (saveFileDialog1.FileName != "")
// Saves the Image via a FileStream created by the OpenFile method.
System.IO.FileStream fs =
(System.IO.FileStream)saveFileDialog1.OpenFile();
// Saves the Image in the appropriate ImageFormat based upon the
// File type selected in the dialog box.
// NOTE that the FilterIndex property is one-based.
switch (saveFileDialog1.FilterIndex)
case 1:
this.button2.Image.Save(fs,
//change button number to what your button number is
System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case 2:
this.button2.Image.Save(fs,
System.Drawing.Imaging.ImageFormat.Bmp);
break;
case 3:
this.button2.Image.Save(fs,
System.Drawing.Imaging.ImageFormat.Gif);
break;
fs.Close();
【讨论】:
以上是关于在 C# 中为表单创建保存按钮的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Xamarin 表单和 C# 将 Html 数据从网站保存到文本文件