PS:模态的意思:我们打开对话框,将值传进取,操作完成确定,主窗体再获得对话框的值;
非模态的意思:我们打开对话框,可以在不关闭窗口的情况下和主窗体交互,主窗体可以即时获得子窗体的值。
1.新建winform项目,添加两个winform窗体命名为:MainForm和Show;
2.MainForm中添加两个button,button1和button2,添加一个richTextBox,richtextBox命名为:richTextBoxMain;
3.Show窗体中添加一个textbox即可,命名为:textBoxShow;
4.MainForm中代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace winform窗体两种传值
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private Show Show;
private void button1_Click(object sender, EventArgs e)
{
Show my = new Show(richTextBoxMain.Text);
if (my.ShowDialog() == DialogResult.OK)
{
richTextBoxMain.Text = my.TextBoxValue;
}
}
private void button2_Click(object sender, EventArgs e)
{
if (Show == null)
{
Show = new Show(richTextBoxMain.Text);
Show.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBoxMain.Text = Show.TextBoxValue; }
);
Show.FormClosed += new FormClosedEventHandler(
(sender2, e2) => { Show = null; }
);
Show.Show(this);
}
else
{
Show.Activate();
}
}
}
}
5.Show中代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace winform窗体两种传值
{
public partial class Show : Form
{
public event EventHandler TextBoxChanged;
public string TextBoxValue
{
get { return textBoxShow.Text; }
set { textBoxShow.Text = value; }
}
public Show() : this("")
{
}
public Show(string Param)
{
InitializeComponent();
TextBoxValue = Param;
}
private void textBoxShow_TextChanged(object sender, EventArgs e)
{
if (TextBoxChanged != null)
TextBoxChanged(this, e);
}
}
}
6.最后效果: