c#的类中如何调用窗体中的事件?

by_封爱 版主 2014-12-10 02:46:24
窗体中代码如下..

public void WriteMsg(object item)
{
listBox1.Invoke(new Action(() =>
{
if (listBox1.Items.Count > 30)
{
listBox1.Items.Clear();
}
listBox1.Items.Insert(0, item);
}));
}

没啥功能就是类似输出日志的东西...

现在要在类(class)中调用.

如果有参数可以传值 那么我在class中定义如下


public delegate void Write(string msg);
public class xxoo
{
public Write write;
public cw(msg)
{
write(msg);
}
}


调用的话 直接

xxoo x=new xxoo();
x.Write=WriteMsg;
x.cw("admin");


是可以实现的.

不过 现在问题是这样..我有方法是不能传参数的.. (比如调度之类的东西)

里面只有方法 比如


public class BurnTime : Quartz.IJob
{
public void Execute(Quartz.IJobExecutionContext context)
{
//我如何在这里面 可以调窗体的writeMsg的方法? 前提不允许把WriteMsg提出来到类中
// 如果是这样 似乎又得把控件当参数传过去.改动太多.....
}
}
...全文
661 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liupan182 2016-06-04
  • 打赏
  • 举报
回复
by_封爱 版主 2014-12-10
  • 打赏
  • 举报
回复
自己研究了一会解决了. 思路如下... 还是使用委托..不过是全局的了.. 在当前namespace下定义一委托

 public delegate void Write(string msg);
在from1窗体中定义一个public 的上面的东西

 public static Write MyWrite;
并且在from的构造函数(或者加载中赋值)

public Form1()
{
 InitializeComponent();
 MyWrite = Write;
}
其中Write就是上面操作listbox1的方法. 那么我在别的无参的方法中 使用

 namespace.Form1.MyWrite("xxoo");
就可以实现了.... 多谢大家回帖...
by_封爱 版主 2014-12-10
  • 打赏
  • 举报
回复
引用 6 楼 qq_24352153 的回复:
你的类什么时候调用?跟form的先后执行关系?调用过程? 说的有点不清楚
调度任务 定时执行 没有参数. . 或者简单来说 就是按钮执行一个没有参数的方法...方法中调用窗体中的事件..
引用 1 楼 Z65443344 的回复:
你要想办法解耦啊 你这样类不是跟窗体完全关联到一起去了,你不如把类里的代码全部复制到窗体中算了
我真心想把所有的代码都写到from里.. 不过这个插件不允许罢了.... 现在就是执行这个方法的时候 没有参数.. 有参数 类似我文中提到的委托 直接可以用.
exception92 2014-12-10
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
[quote=引用 4 楼 duanzi_peng 的回复:] 实例化 窗体类再调用。我怎么感觉 逻辑有点别扭呀。
实例化一个新的窗体,那执行完事件,会显示到新窗体的控件里,而不是原来的窗体啊[/quote] 所以 感觉逻辑别扭,不对呀。 估计他窗口中是不会使用那个类的,所以窗口实例 怎么传??怎么调用那个方法?
qq_24352153 2014-12-10
  • 打赏
  • 举报
回复
引用 6 楼 qq_24352153 的回复:
你的类什么时候调用?跟form的先后执行关系?调用过程? 说的有点不清楚
你这个form跟类互相调用的话 委托随便就解决了 其他就真纠结了
qq_24352153 2014-12-10
  • 打赏
  • 举报
回复
你的类什么时候调用?跟form的先后执行关系?调用过程? 说的有点不清楚
於黾 2014-12-10
  • 打赏
  • 举报
回复
引用 4 楼 duanzi_peng 的回复:
实例化 窗体类再调用。我怎么感觉 逻辑有点别扭呀。
实例化一个新的窗体,那执行完事件,会显示到新窗体的控件里,而不是原来的窗体啊
exception92 2014-12-10
  • 打赏
  • 举报
回复
实例化 窗体类再调用。我怎么感觉 逻辑有点别扭呀。
於黾 2014-12-10
  • 打赏
  • 举报
回复
要么你把窗体实例传递进类里去,然后类里就可以通过实例调用它里面的方法
於黾 2014-12-10
  • 打赏
  • 举报
回复
你要想办法解耦啊 你这样类不是跟窗体完全关联到一起去了,你不如把类里的代码全部复制到窗体中算了

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧