获取Form.ShowDialog() 出的窗体中textbox的返回值

本文介绍了一种通过使用ShowDialog方法在窗体间传递数据的技巧,具体步骤包括创建两个窗体(from1和form2),在from1中展示form2并获取form2中输入的文本框内容,最后在from1中根据返回结果显示form2的属性值。此方法适用于需要在不同窗体间进行数据交互的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常会遇到ShowDialog出的窗体中有一些textbox,输入完后返回到主窗体中。怎么办呢?有办法。

理论上讲ShowDialog后的窗体返回值类型是DialogResult。也就是一个枚举值,只有yes,no,ok之类的值,肯定是不能把textbox中的值返回的。有人说重写DialogResult。可以,但是估计没几个人会的。

举个简单的例子就可以实现。

两个窗体from1,form2

from1中ShowDialog出form2

form2中有个textbox1,有个button1

在form2中定义一个public属性,名字为test

点击button1,将属性test设置为textbox1的值,设置this.DialogResult的值为OK(当然也可以是其他的,但是建议不是cancel,WHY?自己去想。)

在form1的shoudialog后面写判断返回值是不是OK,如果是输出form2的属性test  效果达到。

下面是代码。

//FROM1

private void button1_Click(object sender, EventArgs e)
        {
           form2     myform2 = new form2();

       DialogResult ddr = myform2 .ShowDialog();
            if(ddr == DialogResult.OK)
            {
                MessageBox.Show(myform2 .test);
            }
        }

//FORM2

//我没定义属性,写了个变量,自己看情况

public string test= string.Empty;

private void button1_Click(object sender, EventArgs e)
        {
            test= this.textBox1.Text.Trim();
            this.DialogResult = DialogResult.OK;
        }

namespace _2 { public partial class Form2 : Form { // 添加重新登录标志 public bool ShouldRelogin { get; private set; } = false; private string username; private string connectionString = "Data Source=localhost;Initial Catalog=学习管理助手;Integrated Security=True;"; private OpenFileDialog openFileDialog1 = new OpenFileDialog(); private WebBrowser webBrowser1 = new WebBrowser(); // 统一使用带参构造函数 public Form2(string username) { InitializeComponent(); this.username = username; // 初始化控件 openFileDialog1.Filter = "所有文件 (*.*)|*.*"; webBrowser1.Dock = DockStyle.Fill; panel1.Controls.Add(webBrowser1); // 显示当前用户名(可选) this.Text = $"用户管理 - {username}"; } private void 打开ToolStripMenuItem_Click(object sender, EventArgs e) { } // 修复 DeleteUserAccount 方法 private bool DeleteUserAccount() { if (string.IsNullOrWhiteSpace(username)) { MessageBox.Show("用户名无效,无法执行操作", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; // 修复:改为 return false } using (SqlConnection conn = new SqlConnection(connectionString)) { try { conn.Open(); string query = "DELETE FROM T_User WHERE Uname = @Username"; using (SqlCommand cmd = new SqlCommand(query, conn)) { cmd.Parameters.Add("@Username", SqlDbType.NVarChar, 50).Value = username; int rowsAffected = cmd.ExecuteNonQuery(); if (rowsAffected > 0) { MessageBox.Show($"账号 {username} 已成功注销", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information); return true; } else { MessageBox.Show($"未找到用户 {username}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } } catch (SqlException sqlEx) { MessageBox.Show($"数据库错误: {sqlEx.Message}", "SQL错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } catch (Exception ex) { MessageBox.Show($"操作失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } } // 添加 ShowLoginForm 方法 private void ShowLoginForm() { ShouldRelogin = true; this.Close(); } private void 退登录ToolStripMenuItem_Click(object sender, EventArgs e) { if (DialogResult.Yes == MessageBox.Show("确认退吗", "消息", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) { ShowLoginForm(); // 使用统一方法 } } private void 注销账号ToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult confirm = MessageBox.Show($"确定要永久删除账号 {username} 吗?", "确认删除", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (confirm == DialogResult.Yes) { if (DeleteUserAccount()) { ShowLoginForm(); // 使用统一方法 } } } // 添加窗体关闭事件处理(可选) protected override void OnFormClosing(FormClosingEventArgs e) { base.OnFormClosing(e); // 如果需要重新登录,不取消关闭操作 if (ShouldRelogin) return; // 其他关闭逻辑(如确认退) if (e.CloseReason == CloseReason.UserClosing) { var result = MessageBox.Show("确定要退程序吗?", "退确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.No) { e.Cancel = true; } } } private void 打开ToolStripMenuItem1_Click(object sender, EventArgs e) { // 显示打开文件对话框 if (openFileDialog1.ShowDialog() == DialogResult.OK) { // 获取选中的文件路径 string filePath = openFileDialog1.FileName; try { // 在 WebBrowser 控件中显示文件 webBrowser1.Navigate(filePath); } catch (Exception ex) { MessageBox.Show("打开文件时错:" + ex.Message); } } } private void 修改密码ToolStripMenuItem_Click(object sender, EventArgs e) { FormUpdatePwd_User form = new FormUpdatePwd_User(); form.ShowDialog(); } private void panel1_Paint(object sender, PaintEventArgs e) { } private void 修改ToolStripMenuItem_Click(object sender, EventArgs e) { } } }form2怎么改?实现注销成功后关闭form2窗口,回到form1
最新发布
07-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值