using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
} private MyDialog m_dlg; private void toolStripButton1_Click(object sender, EventArgs e)
{
MyDialog dlg = new MyDialog(richTextBox1.Text);
if (dlg.ShowDialog() == DialogResult.OK)
{
richTextBox1.Text = dlg.TextBoxValue;
}
} private void toolStripButton2_Click(object sender, EventArgs e)
{
if (m_dlg == null)
{
m_dlg = new MyDialog(richTextBox1.Text);
m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
m_dlg.FormClosed += new FormClosedEventHandler(
(sender2, e2) => { m_dlg = null; }
);
m_dlg.Show(this);
}
else
{
m_dlg.Activate();
}
}
}
}
子窗体C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class MyDialog : Form
{
public event EventHandler TextBoxChanged; public string TextBoxValue
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
} public MyDialog() : this("") { } public MyDialog(string Param)
{
InitializeComponent();
TextBoxValue = Param;
} private void textBox1_TextChanged(object sender, EventArgs e)
{
if (TextBoxChanged != null)
TextBoxChanged(this, e);
} private void button1_Click(object sender, EventArgs e)
{
Close();
}
}
}这篇文章中,有个问题想问下,我按toolStripButton2_Click执行弹出m_dlg,可是当我关闭m_dlg的时候 m_dlg.TextBoxValue因为m_dlg为null,会报错,请教怎么解决
(sender2, e2) => { m_dlg = null; }这句话不是释放了吗,把它注释掉就好了。
private void toolStripButton1_Click(object sender, EventArgs e)
{
MyDialog dlg = new MyDialog(richTextBox1.Text);
if (dlg.ShowDialog() == DialogResult.OK)
{
richTextBox1.Text = dlg.TextBoxValue;
}
} private void toolStripButton2_Click(object sender, EventArgs e)
{
MyDialog m_dlg = new MyDialog(richTextBox1.Text);
m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
m_dlg.Show(this);
}你这样不就行了吗,
m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }这样的事件添加就无效了
{
MyDialog dlg = new MyDialog(richTextBox1.Text);
if (dlg.ShowDialog() == DialogResult.OK)
{
richTextBox1.Text = dlg.TextBoxValue;
}
} private void button2_Click(object sender, EventArgs e)
{
//if (m_dlg == null)
{
MyDialog m_dlg = new MyDialog(richTextBox1.Text);
m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
//m_dlg.FormClosed += new FormClosedEventHandler(
// (sender2, e2) => { m_dlg = null; }
//);
m_dlg.Show(this);
}
//else
//{
// m_dlg.Activate();
//}
}这样好用啊,你怎么不行呢?
MainForm.isMdiContainer = true; private void toolStripButton2_Click(object sender, EventArgs e)
{
if (m_dlg == null)
{
m_dlg = new MyDialog(richTextBox1.Text);
m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
m_dlg.FormClosed += new FormClosedEventHandler(
(sender2, e2) => { m_dlg = null; }
); m_dlg.MdiParent = this; m_dlg.Show();
}
else
{
m_dlg.Activate();
}
}
这样就失效了,弹不出来,难道这种传值方式不适用MDI方式?
{
if (m_dlg == null)
{
m_dlg = new MyDialog(richTextBox1.Text);
m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
m_dlg.FormClosed += new FormClosedEventHandler(
(sender2, e2) => { m_dlg = null; }
);
m_dlg.Show(this);
}
else
{
m_dlg.Activate();
}
}没有出现问题,一切正常。private void toolStripButton2_Click(object sender, EventArgs e)
{
if (m_dlg == null)
{
m_dlg = new MyDialog(richTextBox1.Text);
m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
m_dlg.FormClosed += new FormClosedEventHandler(
(sender2, e2) => { m_dlg = null; }
); m_dlg.MdiParent = this; m_dlg.Show();
}
else
{
m_dlg.Activate();
}
}出现了错误
在这一行:m_dlg.MdiParent = this;
被指定为此窗体的 MdiParent 的窗体不是 MdiContainer。
参数名: value不明白楼主为什么要改代码?
MainForm.isMdiContainer = true; private void toolStripButton2_Click(object sender, EventArgs e)
{
if (m_dlg == null)
{
m_dlg = new MyDialog(richTextBox1.Text);
m_dlg.TextBoxChanged += new EventHandler(
(sender1, e1) =>
{ richTextBox1.Text = m_dlg.TextBoxValue; }
);
m_dlg.FormClosed += new FormClosedEventHandler(
(sender2, e2) => { m_dlg = null; }
); m_dlg.MdiParent = this; m_dlg.Show();
}
else
{
m_dlg.Activate();
}
}难道这种传值方式不适用MDI方式?
困扰很久很久,请教解决方案