C#中如何从ShowDialog打开的对话框窗体向主窗体返回ID值
C# 模态对话框向主窗体返回新增记录ID的方案
最简便的实现方式是给对话框窗体新增公共属性存储返回值,操作步骤如下:
1. 修改对话框窗体fDocForm的代码
首先在窗体类定义中新增公共只读属性,用于存储插入成功后的记录ID:
public partial class fDocForm : Form { // 新增公共属性,类型可根据实际ID类型调整(如long/Guid/string等) public int InsertedRecordId { get; private set; } // 原有窗体代码... }
修改按钮点击的业务逻辑,插入数据后给公共属性赋值:
private void button1_Click(object sender, EventArgs e) { // 执行SQL插入逻辑,获取新插入记录的ID,假设存储到变量newRecordId中 int newRecordId = 你的SQL插入操作返回ID的方法(); // 给公共属性赋值 InsertedRecordId = newRecordId; // 赋值DialogResult即可,无需调用Hide(),模态窗会自动关闭 DialogResult = DialogResult.OK; }
2. 修改主窗体的调用代码
模态窗关闭后,只要还持有对话框的实例引用,就可以直接读取公共属性的值:
fDocForm fDocForm = new fDocForm(); fDocForm.ShowDialog(); if(fDocForm.DialogResult == DialogResult.OK) { // 直接读取对话框的公共属性获取返回的ID int resultId = fDocForm.InsertedRecordId; // 后续处理逻辑 } else { MessageBox.Show("null"); }
注意事项
- 属性的set方法设置为private,仅允许窗体内部修改返回值,避免外部误改
- 模态对话框关闭后不会立即销毁实例,只要主窗体还持有
fDocForm的对象引用,就能正常读取属性值 - 如果插入操作可能失败,可以提前做判断,失败时不赋值DialogResult为OK,主窗体就不会进入取值逻辑
内容的提问来源于stack exchange,提问作者MHD
相关产品推荐
相关产品推荐

