winform 第三方控件怎么调用其他窗口的控件?我在a窗口有个播放器和静音按钮,打开b窗口怎么调用a的静音按钮?

当前位置: →
→ C#里边怎样实现窗口A调用窗口B的事件
C#里边怎样实现窗口A调用窗口B的事件
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: C#里面怎样实现窗口A调用窗口B的事件如题,探讨在A中实例化BB b=new B()在A中调用B的方法 直接写 b.method();就行 , 什么叫...
"C#里边怎样实现窗口A调用窗口B的事件"::
c#里面怎样实现窗口a调用窗口b的事件如题------解决方案--------------------探讨在a中实例化bb b=new b()在a中调用b的方法 直接写 b.method();就行
------解决方案--------------------
什么叫做“调用窗体b里边的事件”?当你使用public event .....来定义事件时,c#保证你只能在b窗体实例中自己去触发(抛出事件),别的对象不可能强行让它去触发。你可以为b定一个方法,例如fireevent()方法,在这个触发事件(因为它就是定义在b自己内部)。这样其它对象就可以访问b对象实例,然后让b触发事件。不过,你要想想逻辑,这个事件还是原来的逻辑概念吗?比如说textbox控件的textchanged事件是表示当用户录入数据的事件,现在你给它增加一个firetextchangedevent()方法来让其它对象触发事件,这个事件根本就丧失了原来的概念与流程,这种随意改变逻辑的做法是有害的。
------解决方案--------------------把窗口b里面要调用的事件改成public的~然后在窗口a实例化~再调用就可以了~form2 f = new form2();f.button1_click(null, null); 搜索此文相关文章:里边怎样实现窗口A调用窗口B的事件此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
C#里边怎样实现窗口A调用窗口B的事件_C#技术相关文章
C#技术_总排行榜
C#技术_最新
C#技术_月排行榜
C#技术_周排行榜
C#技术_日排行榜您的举报已经提交成功,我们将尽快处理,谢谢!
设计模式里面有一种叫做观察者(Visitor)模式, 可以看一下
因为设计模式是需要本身已经具备很多知识以及经验以后的东西, 这里我简单给你说一下解决你这个问题...
大家还关注
关于PHOTOSHOP CS 你好,我买...
(window.slotbydup=window.slotbydup || []).push({
id: '2081942',
container: s,
size: '1000,60',
display: 'inlay-fix'【已解决】B窗口中用事件模式监控A窗口中的label控件值变化并同步更新-不用轮询模式 - 已解决问题区 - 『 提问交流 』 -
AUTOIT CN AutoIt中文论坛|acn|au3|软件汉化 - 分享您的技术!
帖子439&精华0&积分334&威望35 点&金钱1473 块&贡献44 分&阅读权限30&在线时间239 小时&注册时间&最后登录&
【已解决】B窗口中用事件模式监控A窗口中的label控件值变化并同步更新-不用轮询模式
本帖最后由 touch_xu 于
17:37 编辑
我想做的事就是,在B窗口中用事件模式监控A窗口中的label控件值变化并同步更新.
A窗口代码如下, 就是用OK产生随机数:#include &ButtonConstants.au3&
#include &GUIConstantsEx.au3&
#include &StaticConstants.au3&
#include &WindowsConstants.au3&
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate(&A&, 179, 126, 192, 124)
$Label1 = GUICtrlCreateLabel(Random(30, 50, 1), 0, 24, 180, 16, $SS_CENTER)
$Button1 = GUICtrlCreateButton(&OK&, 32, 80, 115, 25)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
& & & & $nMsg = GUIGetMsg()
& & & & Switch $nMsg
& & & & & & & & Case $GUI_EVENT_CLOSE
& & & & & & & & & & & & Exit
& & & & & & & & Case $Button1
& & & & & & & & & & & & GUICtrlSetData($Label1, Random(30, 50, 1))
& & & & EndSwitch
WEnd复制代码B窗口代码,就是监控A窗口的随机数变化, 并同步更新, 不用轮询模式:#include &ButtonConstants.au3&
#include &GUIConstantsEx.au3&
#include &StaticConstants.au3&
#include &WindowsConstants.au3&
#region ### START Koda GUI section ### Form=
$Form2 = GUICreate(&B&, 179, 126, 192, 124)
$Label2 = GUICtrlCreateLabel(&0&, 0, 24, 180, 16, $SS_CENTER)
GUICtrlSetOnEvent(-1, &_GuiEvent&)
GUISetOnEvent($GUI_EVENT_CLOSE, &_GuiEvent&)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
Opt('GUIResizeMode', 802)
Opt(&GUIOnEventMode&, 1)
$CtrlHandle = ControlGetHandle(&A&, &&, &Static1&)
GUICtrlSetOnEvent(-1, &_GuiEvent&)
While 1
& & & & Sleep(90)
WEnd
Func _GuiEvent()
& & & & Switch @GUI_CtrlId
& & & & & & & & Case $GUI_EVENT_CLOSE
& & & & & & & & & & & & Exit
& & & & & & & & Case $CtrlHandle
& & & & & & & & & & & & GUICtrlSetData($Label2, ControlGetText($CtrlHandle, &&, &Static1&))
& & & & EndSwitch
EndFunc& &;==&_GuiEvent复制代码大家帮我看下能不能实现,错在什么地方,谢谢!
附件: 您需要才可以下载或查看附件。没有帐号?
帖子415&精华0&积分309&威望41 点&金钱299 块&贡献19 分&阅读权限30&在线时间300 小时&注册时间&最后登录&
多线程解决,实时监控
帖子439&精华0&积分334&威望35 点&金钱1473 块&贡献44 分&阅读权限30&在线时间239 小时&注册时间&最后登录&
多线程解决,实时监控
ap112 发表于
& & 事件结构无法完成吗? 可不可以帮忙修改下,谢谢!
帖子2343&精华0&积分2687&威望118 点&金钱24471 块&贡献1279 分&阅读权限70&在线时间1283 小时&注册时间&最后登录&
这个跟事件啥的有什么关系?定时检测数据,有更新时自己跟着更新就是了.Local $o_data = ControlGetText('A', '', $CtrlHandle)
AdlibRegister('_f_data', 300)
Func _f_data()
& & & & If $o_data && ControlGetText($CtrlHandle, &&, &Static1&) Then
& & & & & & & & $o_data = ControlGetText($CtrlHandle, &&, &Static1&)
& & & & & & & & GUICtrlSetData($Label2, $o_data)
& & & & EndIf
EndFunc复制代码
帖子439&精华0&积分334&威望35 点&金钱1473 块&贡献44 分&阅读权限30&在线时间239 小时&注册时间&最后登录&
回复&&touch_xu
这个跟事件啥的有什么关系?定时检测数据,有更新时自己跟着更新就是了.
user3000 发表于
& & 这就是轮询啊, 我知道这样可以实现, 这样效率不是不高吗, 所以才来寻求更好的方法了!
& & 仍然十分感谢!
帖子704&精华0&积分438&威望37 点&金钱3122 块&贡献12 分&阅读权限30&在线时间358 小时&注册时间&最后登录&
请问一下 是按了OK键才变数字吗? 如果是的话那么从OK控件下手不就简单了~
帖子439&精华0&积分334&威望35 点&金钱1473 块&贡献44 分&阅读权限30&在线时间239 小时&注册时间&最后登录&
请问一下 是按了OK键才变数字吗? 如果是的话那么从OK控件下手不就简单了~
austere 发表于
& & 不是的,这是我模拟的,实际上我所监控的程序是自己后台变化的, 和OK键无关,谢谢!
帖子415&精华0&积分309&威望41 点&金钱299 块&贡献19 分&阅读权限30&在线时间300 小时&注册时间&最后登录&
touch_xu $Form1 = GUICreate(&多线程&, 250, 150, 300, 300)
$Label1 = GUICtrlCreateLabel(&&, 8, 8, 146, 17)
$Button1 = GUICtrlCreateButton(&换个数据&, 168, 8, 79, 25, 0)
$Form2 = GUICreate(&多线程&, 250,150, 570,300)
$Label2 = GUICtrlCreateLabel(&&, 8, 8, 146, 17)
GUISetState(@SW_SHOW,$Form1)
GUISetState(@SW_SHOW,$Form2)
$Timer = DllCallbackRegister(&Timer&, &int&, &dword&)
$TimerDLL = DllCall(&user32.dll&, &uint&, &SetTimer&, &hwnd&, 0, &uint&, 0, &int&, 1000, &ptr&, DllCallbackGetPtr($Timer))
While 1
& && &&&Switch GUIGetMsg()
& && && && && & Case - 3
& && && && && && && && &Exit
& && && && && & Case $Button1
& && && && && && && && &GUICtrlSetData($Label1,Random(1,100))
& && &&&EndSwitch
WEnd
Func Timer($hWnd, $uiMsg, $idEvent, $dwTime)
& && &&&If&&$idEvent = $TimerDLL[0] Then GUICtrlSetData($Label2,GUICtrlRead($Label1))
EndFunc复制代码
帖子439&精华0&积分334&威望35 点&金钱1473 块&贡献44 分&阅读权限30&在线时间239 小时&注册时间&最后登录&
回复&&touch_xu
ap112 发表于
& & 十分感谢,也可以满足我的要求,按照您的代码我分成两个窗口,就OK了,谢谢!
[通过 QQ、MSN 分享给朋友]winform怎么在打开一个窗体B时,同时关闭另一个窗体A,B窗体是在A窗体上弹开的 - C#当前位置:& &&&winform怎么在打开一个窗体B时,同时关闭另一个窗体winform怎么在打开一个窗体B时,同时关闭另一个窗体A,B窗体是在A窗体上弹开的&&网友分享于:&&浏览:0次winform如何在打开一个窗体B时,同时关闭另一个窗体A,B窗体是在A窗体上弹开的?winform在主窗体有一排按钮,其中有个按钮是登录窗口按钮,在点击登录按钮后弹出一个窗体A,在对A窗体进行信息填写后,点击A窗体上确认按钮进入窗体B,与此同时关闭窗体A,然后又得在B窗体上填写完信息后,点击确认进入窗体C,再关闭窗体B。。。在用this.Close()和this.Hide()方法时,出现的效果不是很理想(因为假如窗体B弹出时,窗体A时隐藏了,但是窗体B不是直接弹出来的,而是直接缩小化在电脑标题栏下面,还需要点击一下进行查看)。所以请高手指教该怎么做,本人菜鸟一枚。------解决思路----------------------Appcation.exit(this)------解决思路----------------------你可以把那些BCDE什么的都弄成MDI子窗体,嵌入主窗体中,都最大化显示,这样就不用老纠结这个弹出那个必须关闭什么的------解决思路----------------------或者登陆窗体不要隐藏,直接退出
打开主窗体用Application.Run(new&Mainform());
这样两个窗体就不是同一个线程了,不会因为登陆窗体关闭导致弹出的窗体也关闭------解决思路----------------------问题的关键就是你拿什么作为主窗体
主窗体才能&Application.Run(new&&??);
你如果只是&Application.Run(new&&FirstWindow());&那你是自己给自己下套。------解决思路----------------------当然是登陆窗体打开主窗体的时候使用Application.Run了
本来Mainform应该是主窗体才对,但是需要先显示登陆窗体,而登陆窗体默认是用Application.Run打开的,它变成真正的主窗体了
使用Application.Run(new&Mainform()),然后将登陆窗体close掉,这样主窗体就变成真正的主窗体,也不再有多余的隐藏窗体存在
当然如果之后的每个窗体都这么干,那纯粹是给自己找不自在------解决思路----------------------引用:当然是登陆窗体打开主窗体的时候使用Application.Run了
本来Mainform应该是主窗体才对,但是需要先显示登陆窗体,而登陆窗体默认是用Application.Run打开的,它变成真正的主窗体了
使用Application.Run(new&Mainform()),然后将登陆窗体close掉,这样主窗体就变成真正的主窗体,也不再有多余的隐藏窗体存在
当然如果之后的每个窗体都这么干,那纯粹是给自己找不自在
我就是在怀疑他没有这么干!我怀疑他把描述中的第一个启动的窗体放到了&Run&里面!------解决思路----------------------点A的确定按钮时:
Application.OpenForms[0].BeginInvoke((Action)(()&=&&new&B().ShowDialog()));
Close();------解决思路----------------------
&&&&static&class&Program
&&&&&&&&///&&summary&
&&&&&&&&///&应用程序的主入口点。
&&&&&&&&///&&/summary&
&&&&&&&&[STAThread]
&&&&&&&&static&void&Main()
&&&&&&&&&&&&Login&login&=&new&Login();
&&&&&&&&&&//&&FrmMain&login&=&new&FrmMain();
&&&&&&&&&&&&DialogResult&loginDr&=&login.ShowDialog();
&&&&&&&&&&&&if&(loginDr&!=&DialogResult.OK)
&&&&&&&&&&&&&&&&&//结束程序
&&&&&&&&&&&&Application.Run(new&FrmMain());
我就是这么干的&------解决思路----------------------Login&页面&&&&登录成功&后&&
&&&//登录成功
&&&&&&&&&&&&&&&&DialogResult&=&DialogResult.OK;------解决思路----------------------如果你还要回到A的话,就只能用this.Hide();
给你一个解决办法,你这个类似于向导类应用。
可以在一个窗体中放几个panel,每次要显示下一个panel时用panel.BringToFront()------解决思路----------------------panel可以隐藏啊,谁告诉你不能隐藏的
不过你最好还是换成tabcontrol之类的控件,否则布局起来相当麻烦,而且设计阶段看到的和运行阶段看到的会不一致
想给分,点结贴------解决思路----------------------引用:我知道可以隐藏,但是在VS2010上&布局的时候&你能像DIV一样隐藏吗?
所以麻烦。tabcontrol控件可以当DIV一样的使用吗?
点击窗体B上的确定按钮时,弹出窗体C,此时也要关闭窗体B,不能先关闭B,然后自动从A上打开C吗,为何一定要先开C再关B
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 winform 音乐播放器 的文章

 

随机推荐