希望点击TextBox时弹出一个对话框,里面显示原值并允许输入新值,确认后更新原TextBox的值。
一,主窗体创建
一、创建主窗体及控件
新建Windows窗体项目
在Visual Studio中选择 Windows窗体应用(.NET Framework或.NET) 模板创建项目。
添加主窗体控件
向主窗体(如MainForm)拖入一个TextBox控件,命名为txtMain
二,创建修改值子窗体
- 添加新窗体
右键项目 → 添加 → Windows窗体,命名为EditForm
- 设计子窗体界面
csharp
// EditForm窗体控件:
- Label(显示"原值:") + TextBox(命名为txtOldValue,ReadOnly=True)
- Label(显示"新值:") + TextBox(命名为txtNewValue)
- Button(命名为btnOK,Text="确定")
- Button(命名为btnCancel,Text="取消")
- 添加子窗体属性传递数据
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"}
}
}
三,实现交互逻辑
- 主窗体中绑定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; // 更新主窗体
}
}
}
- 子窗体中处理按钮事件
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方法更新UI3,但本案例无需额外处理。