C#中怎样控制父form中的timer?

一转程序员 2016-02-16 08:53:48
现在有一个多窗口程序,父form有多个子form
我在父form上放了一个timer和一个public static string变量,并写了timer1_tick(),用来改写public static string变量

现在想在一个子form中启动timer1和执行timer1_tick(),应该怎么做?
timer1_tick()中好象还不能直接写成timer1.stop()了,应该怎么写?
...全文
291 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
john_QQ:2335298917 2016-02-20
  • 打赏
  • 举报
回复
一种方法是把主窗体作为参数传给子窗体,这样就主窗体和子窗体就是强耦合的;一种是在子窗体中使用事件,主窗体订阅事件,根据事件传递的参数来决定是否启动timer,这样主窗体和子窗体就是弱耦合的。
消逝青春1990 2016-02-20
  • 打赏
  • 举报
回复
主窗体调用子窗体时,可以把自身作为一个参数传到子窗体中 如: Form1 f=new Form1(this); f.Show();
xian_wwq 2016-02-17
  • 打赏
  • 举报
回复
最简单就是使用共有变量, 比较通用的方式是使用事件,创建子窗体时绑定事件, 通过事件触发方式来进行操作
gxmark 2016-02-17
  • 打赏
  • 举报
回复
可以考虑定义一个静态变量。 public static System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
七步777 2016-02-17
  • 打赏
  • 举报
回复
发消息给主窗体 或者事件
xian_wwq 2016-02-17
  • 打赏
  • 举报
回复
引用 10 楼 hodrag 的回复:
[quote=引用 8 楼 xian_wwq的回复:]最简单就是使用共有变量, 比较通用的方式是使用事件,创建子窗体时绑定事件, 通过事件触发方式来进行操作
怎样在创建子窗体时绑定事件呢?代码怎么写?[/quote] 网络搜 c# event
一转程序员 2016-02-17
  • 打赏
  • 举报
回复
引用 8 楼 xian_wwq的回复:
最简单就是使用共有变量, 比较通用的方式是使用事件,创建子窗体时绑定事件, 通过事件触发方式来进行操作
怎样在创建子窗体时绑定事件呢?代码怎么写?
一转程序员 2016-02-17
  • 打赏
  • 举报
回复
引用 2 楼 以专业开发人员为伍的回复:
首先你要搞定“父子关系”。面向对象设计中要求遵守单向依赖、依赖倒置原则,一旦你确定“父-子窗口”,那么父窗口就依赖于子窗口,而子窗口就应该不依赖父窗口。说“子窗口去更改父窗口”这就是纠结了。 子窗口应该设计成为独立的服务对象。它应该有自己的行为准则,它抛出事件去通知自己的宿主,而不应该去纠结地“修改宿主”。子窗口应该根本不知道自己的父窗口是谁、是什么接口的,这样当你扩展重构你的系统时,才能重复使用子窗口的设计创意。
这理论是对,但是我想要这个timer是所有子窗体共用的,照你这么说这样做就是错的?你会怎么做?
threenewbee 2016-02-16
  • 打赏
  • 举报
回复
((this.Owner) as Form类名).Timer1 把Timer1定义成public的
sp1234_maJia 2016-02-16
  • 打赏
  • 举报
回复
把上面的例子说得更具体一点,一个做功监视器它只有两个事件——“开始工作、停止工作”,然后它有一个“读数”接口可以让宿主读取做功数值。仅此而已,在工厂里生产或者工控机设计者到市场上去采购做功监视器的时候,做功监视器就是一个独立的组件。 因此子窗口应该从业务意义上设计接口,能够抛出事件,能够(被)读数据。它不依赖父窗口。 如果你说要研发一个做功监视器需要求纠结什么“父窗口的定时器、往父窗口写数据”,那就本末倒置了。
  • 打赏
  • 举报
回复
比如说,你有一个仪表盘,其中有一个组件可以监视机器使用状态,当机器“启动”后开始连续监视机器做功,并且取最近10次定时监视结果来判断机器有没有出现20中异常做功状态中的任意一种(如果出现,就报警)。当机器“停止”后就停止监视了。 面向对象设计是期望能够符合“自然而然”的基本道理的,不是瞎拼凑的。 在这样的一个应用中,仪表盘(它有多种监视组件)依赖于做功监视器,那么就说后者嵌入了前者。但是设计一个做功监视器并不依赖于仪表盘,它出场时并不关心自己嵌入哪一个宿主设备中。 遵守这样的原则,你就能比较清楚你的系统的架构,在越来越复杂、越来越重构的过程中,不迷路。
  • 打赏
  • 举报
回复
“如果能就可以访问timer,如果不能就编一个”,这是只学了一半基本编程设计。 学习在自己编写的class上进行事件声明,你才学了另外一半。
  • 打赏
  • 举报
回复
首先你要搞定“父子关系”。面向对象设计中要求遵守单向依赖、依赖倒置原则,一旦你确定“父-子窗口”,那么父窗口就依赖于子窗口,而子窗口就应该不依赖父窗口。说“子窗口去更改父窗口”这就是纠结了。 子窗口应该设计成为独立的服务对象。它应该有自己的行为准则,它抛出事件去通知自己的宿主,而不应该去纠结地“修改宿主”。子窗口应该根本不知道自己的父窗口是谁、是什么接口的,这样当你扩展重构你的系统时,才能重复使用子窗口的设计创意。
john_QQ:2335298917 2016-02-16
  • 打赏
  • 举报
回复
子Form能获得父From的引用吗?如果能就可以访问timer,如果不能就编一个

110,538

社区成员

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

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

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