110,538
社区成员
发帖
与我相关
我的任务
分享
这点小事还劳烦版主亲自出马。 [quote=引用 30 楼 happy09li 的回复:] 用事件和委托很好实现
这点小事还劳烦版主亲自出马。 用事件和委托很好实现
用事件和委托很好实现
不行啊程序都直接报错了。 [quote=引用 8 楼 c02645 的回复:] ((Form1)this.Parent).TextBox1.Text = "你要的log内容文字";
不行啊程序都直接报错了。 ((Form1)this.Parent).TextBox1.Text = "你要的log内容文字";
可能是我用词不当吧,启动程序后,窗体就有一个textbox了。 [quote=引用 21 楼 goodhtml 的回复:] [quote=引用 19 楼 vb763305825 的回复:] 虚拟是什么意思?
public delegate void ParentShowText(string txtText);//声明一个委托
public ParentShowText ShowText;//声明事件
其中ParentShowText是委托名,后面是参数,委托名可以随便起,参数可以随便定,调用的时候对应起来就可以了。
在Form1中打开Form2时
private void Button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowText += new Form2.ParentShowText(ShowText_Method);
f2.Show();
}
Form1不一定是Form2的主窗体
然后在Form1中写一个实现的公共的事件
public void ShowText_Method(string txtText)//参数与Form2中的委托对应起来
{
//根据Form2中的传参,实际是在Form1中操纵细节
TextBox1.Text = txtText;
}
在Form2中的Button的点击事件
private void Button2_Click(object sender, EventArgs e)
{
string logs = "";//从txt文件中读取
ShowText(logs);
}
好了,大功告成!
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowLog += new EventHandler<LogEventArgs>(f2_ShowLog);
f2.Show();
}
void f2_ShowLog(object sender, LogEventArgs e)
{
textBox1.Text = e.Text;
}
}
}
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OnShowLog(new LogEventArgs("log log log log log"));
}
private void OnShowLog(LogEventArgs e)
{
if (ShowLog != null) ShowLog(this, e);
}
public event EventHandler<LogEventArgs> ShowLog;
}
public class LogEventArgs : EventArgs
{
public string Text { get; private set; }
public LogEventArgs(string log)
{
Text = log;
}
}
}
可能是我用词不当吧,启动程序后,窗体就有一个textbox了。 [quote=引用 19 楼 vb763305825 的回复:] 虚拟是什么意思?