在Visual Studio中使用C#开发Windows窗体应用程序时,如何实现点击TextBox弹出修改对话框并更新值的功能

希望点击TextBox时弹出一个对话框,里面显示原值并允许输入新值,确认后更新原TextBox的值。

一,主窗体创建

一、创建主窗体及控件

‌新建Windows窗体项目‌

在Visual Studio中选择 ‌Windows窗体应用(.NET Framework或.NET)‌ 模板创建项目‌。

‌添加主窗体控件‌

向主窗体(如MainForm)拖入一个TextBox控件,命名为txtMain

二,创建修改值子窗体

  1. 添加新窗体‌

右键项目 → ‌添加‌ → ‌Windows窗体‌,命名为EditForm

  1. 设计子窗体界面
csharp 复制代码
 // EditForm窗体控件:
- Label(显示"原值:") + TextBox(命名为txtOldValue,ReadOnly=True)
- Label(显示"新值:") + TextBox(命名为txtNewValue)
- Button(命名为btnOK,Text="确定")
- Button(命名为btnCancel,Text="取消")‌
  1. ‌添加子窗体属性传递数据
csharp 复制代码
public partial class EditForm : Form
{
    public string NewValue { get; private set; }  // 存储用户输入的新值‌:ml-citation{ref="6,7" data="citationList"}
    
    public EditForm(string oldValue)
    {
        InitializeComponent();
        txtOldValue.Text = oldValue;  // 初始化显示原值‌:ml-citation{ref="7" data="citationList"}
    }
}

三,实现交互逻辑

  1. ‌主窗体中绑定TextBox点击事件
csharp 复制代码
// MainForm.cs
private void txtMain_Click(object sender, EventArgs e)
{
    using (EditForm editForm = new EditForm(txtMain.Text))  // 传入当前值‌
    {
        if (editForm.ShowDialog() == DialogResult.OK)  // 模态显示子窗体‌
        {
            txtMain.Text = editForm.NewValue;  // 更新主窗体
        }
    }
}
  1. 子窗体中处理按钮事件
csharp 复制代码
// EditForm.cs
private void btnOK_Click(object sender, EventArgs e)
{
    this.NewValue = txtNewValue.Text;  // 获取用户输入的新值‌
    this.DialogResult = DialogResult.OK;  // 设置对话框结果‌
    this.Close();
}

private void btnCancel_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
    this.Close();
}

四、关键配置点

‌主窗体TextBox属性设置‌

确保txtMain的ReadOnly属性为False以允许修改‌。‌跨窗体线程安全‌

若涉及多线程操作(如异步加载数据),需使用Invoke方法更新UI‌3,但本案例无需额外处理。

相关推荐
Eiceblue32 分钟前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
程序视点1 小时前
Window 10文件拷贝总是卡很久?快来试试这款小工具,榨干硬盘速度!
windows
wuk9982 小时前
基于MATLAB编制的锂离子电池伪二维模型
linux·windows·github
lzb_kkk3 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
jyan_敬言8 小时前
【C++】string类(二)相关接口介绍及其使用
android·开发语言·c++·青少年编程·visual studio
昏睡红猹8 小时前
C#脚本化(Roslyn):如何在运行时引入nuget包
c#
张人玉9 小时前
C# 常量与变量
java·算法·c#
就是有点傻9 小时前
在C#中,可以不实例化一个类而直接调用其静态字段
c#
软件黑马王子9 小时前
C#系统学习第八章——字符串
开发语言·学习·c#
阿蒙Amon10 小时前
C#读写文件:多种方式详解
开发语言·数据库·c#