标题:求助,关于msgbox 的功能实现
取消只看楼主
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
结帖率:100%
已结贴  问题点数:20 回复次数:6 
求助,关于msgbox 的功能实现
提问原因: VB 本身的 Msgbox 存在两点限止,1. 每次都显示在中心位置,位置不好指定。 2.样式的确太单调了些。
我的想法: 1.自制对话框,实现Msgbox 的类似功能, 不行的话就  2. 指定Msgbox 显示坐标
我已尝试: 用窗体做了一个对话框,单独确认是可以的,但需要通过窗体,返回“是”,“否”而确定下一步指令时,不能实现。 因为窗体打开后,程序不能挂起,代码还在往后执行。不能像msgbox 本身哪样要确认后,会根据返回的值后再往下执行。  我偿试了DoEvents,Stop 都没有成功。
哪位朋友有这方面的思路或代码的话,帮指点一下。 谢谢了!
搜索更多相关主题的帖子: 返回 窗体 指定 msgbox 执行 
2021-12-08 19:46
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
经过反复偿试,问题解决了,我自己结贴吧,效果还行,思路为:当消息框出来后,让代码停在一个循环中,当点击消息框时,打破这个循环往下执行(同时产生一个变量值指导下一步执行),网络上查到的代码资料全是大篇大篇的还涉及到很多API,不实用。
Msgfrm.Show ' 显示自制的消息框,里面有是否,相当于原msgbox 的VBYS 和 VBNO,点击后会改变全局变量 IsExit
IsExit = False '全局变量
Do While DoEvents '// 设置一个循环直到交出控制权
If IsExit = True Then Exit Do '// 当全局变量为 True 时跳出循环
Loop
If MsgYN = True Then '来自于自制消息框的反馈变量,根据此变量来定义下一步动作
MsgBox "执行"
Else
MsgBox "停止"

不去做永远没有结果!
2021-12-10 13:05
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 3楼 apull
非常感谢! 原来这么简单。
show 1 模态窗口,能够让系统挂起,就这一点点就完全解决了我的问题。
这两天还绕了这么久,自学还是会走很多弯路!!要多向大神请教啊!
感谢!



[此贴子已经被作者于2021-12-10 16:26编辑过]


不去做永远没有结果!
2021-12-10 15:27
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 6楼 风吹过b
好建议,我准备写几种模式的,根据传递的参数来改变设置。

不去做永远没有结果!
2021-12-11 16:09
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 5楼 apull
是的,这的确是一个积累的过程,刚开始这一个月搞得很慢,MSDN 安装时没装上。 看来要重装一下。
    现在觉得轻松一些了,大约的语句写法,数组,数据库结构,SQL语句这些都有了一些概念。欠缺积累,各类函数,和一些控件的属性。一些功能的实现,基本上能够写得出来。就是方法和代码都不是最优化的。所以代码的 稳定性,速度,简约,是下一步主要学习的过程。
    当然还有站在使用者的位置来考虑, 操作的便捷性,使用者学习的简易性,数据结构的统一性,还有防止误操作的逻辑设置。我以前在工作中长期和工作流程和数据打交道,知道这个过程会出现的各种各样奇怪的可能。所以现在自己编,往往在这方面考虑和花费的时间最多! 往往开始觉得写的很好的一个模块,后来发现一些极端的情况下,会产生数据误差。就需要推倒重写。
    在工业术语里叫“防呆”,按大白话的说法是,要通过一种方法,防止呆子一样的人,做出呆子一样的操作带来不好的结果。我们要有一种机制来防止其发生。编写应用软件,也用得上这个理念 .....哈哈

不去做永远没有结果!
2021-12-11 16:36
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 9楼 风吹过b
    你的思路很有系统性,如有时间去完成,从个性化和适应性方面会比Msgbox 好很多。
我想的还有一点就是提示框显示的位置,如何取得程序中某一个控件的绝对坐标(这个最好做成一个全局函数需要时随时调用)
然后提示框显示位置,就可以指定控件的坐标为参考。显示在合适的位置。我还试过用鼠标勾子获取当时点击位的坐标,以此做为参照来指定显示位置,但没有做成,偏差太远。
     在大屏上操作多款软件时,如果本软件处于边界位置,没有处于最大化时,点击提示框却显示在别的软件界面上。就很别扭了。
所以我这几天也一直在想,多层frame 里的控件,相对MID窗的坐标如何获取。不知道有没有表达“上层容器”的语句。如果有的话。就可以写一个函数,从指定控件本身起,查找其在上层容器的Left 和 TOP 值。 这样加起来最终能得到指定控件相对于,MID 窗体的坐标。

不去做永远没有结果!
2021-12-12 12:48
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
完美,加上风版的这段代码,可以打造出比较个性化的定制Msgbox 消息框了!
感谢!

不去做永远没有结果!
2021-12-12 18:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507807-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.067813 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved