系统登陆时先是欢迎窗体,再是登陆窗体,登陆后再是主窗体,为什么欢迎窗体上的内容图片不能出来?

lyshrine 2018-06-25 09:39:54
如题所示,我照着如下代码来的
https://blog.csdn.net/kasama1953/article/details/52069627
我在欢迎的窗体里加了一个图片,但运行时,欢迎窗体上的图片或者文字不能显示出来,
请问是怎么回事?是不是要用到多线程呀?
...全文
168 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyshrine 2018-06-26
  • 打赏
  • 举报
回复
to xomix
感谢,我在看看
lyshrine 2018-06-26
  • 打赏
  • 举报
回复
to 以专业开发人员为伍
您的代码,我试了试,有报错的,您能帮看看吗?谢谢了
链接:https://pan.baidu.com/s/12go5iwjfMI3zdXiccSP6SA 密码:9ple
  • 打赏
  • 举报
回复
一个winform 应用程序必定要在进程启动时 Application.Run(......) 方式去加载进程第一个主窗体,否则就可能造成后续消息接受处理混乱。

然后按照流程,需要等待一定条件(比如说另外一个用户用微信扫二维码之后)才加载第二个窗体(比如说根据扫码用户的信息来动态加载第二个任务表单),然后依次等待第二个窗体不同的分支条件而加载第三个窗体(第三个窗体完全可能是4、5种窗体中任意一种,不确定的类型)........这就是流程概念。

那么怎么控制窗体加载流程?在没有必要或者根本不可能最终确定类型的时候不要去加载后续窗体,这就是要熟悉的编程技能。
  • 打赏
  • 举报
回复
这里的重点在于,有 Welcome、Login、MainForm 三种窗体。而不是2种。

当你需要面对的启动过程有“流程”概念时,往往许多人就“蒙”了。因为他刚入门时只学过启动是有2个窗体顺序显示的代码,一旦需要有3个就蒙了。

所以我强调的是,“仅作必要的事情”,仅仅在必须时才加载窗体。不是一股脑地混乱地纠结3个窗体,而是按照时间顺序仅仅在必要时才加载下一步的窗体。了解这个做法,你就已经掌握了一些编程自由的知识。
  • 打赏
  • 举报
回复
Login 是进程主窗体 Welcome 加载的,还是 Program 主过程加载的,这个我觉得主要还是体验问题,这就好像说汽车轮胎是汽车的一部分、还是认为汽车轮胎恰好游离于汽车整车之外,这以不影响测试为准。

只要不是设计为用 Login 窗体加载 Welcome 窗体这种言行相反的代码,就行了。
  • 打赏
  • 举报
回复

        //我的看法是welcome和login都应该写在这里,最后使载入MainForm
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Welcome formsw = new Welcome();
            forms.Show();
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Interval = 1000;
            timer.Elapsed += (s,e) => {
                formw.Hide();
                if ((new Login()).ShowDialog()==DialogResult.OK)
                {
                    Application.Run(new MainForm());
                }
            };
        }
因为在入口控制的东西就应该控制在入口,而不是Application.Run之后再去close不同的窗口。其他跟sp一样。
  • 打赏
  • 举报
回复
注意最基本的原则,例如:

1. 按照最自然的”感觉“来写代码,做到言行一致。按照 Welcome、Login、MainForm 的顺序加载窗口,而不是按照什么 Login、Welcome 的实现与分析完全相反的顺序来写代码。

2. 不要看那些动不动就在 UI 线程阻塞的代码。要学会异步事件驱动开发思路。
lyshrine 2018-06-25
  • 打赏
  • 举报
回复
to 以专业开发人员为伍
多谢您的指导,我明天试试,十分感谢
  • 打赏
  • 举报
回复
代码 MainForm m 是多余的一行代码,你删除了就行了。


Welcome 窗口中使用一个定时器,达到你要求的”即使没有必要儿也“刻意要暂停几秒的目的。


注意不要写任何的 Sleep 代码。不要阻塞。
  • 打赏
  • 举报
回复
怎么回事儿?csdn的代码显示贴不全?后边的代码是
                m.FormClosed += M_FormClosed;
}
else
this.Close();
}

private void M_FormClosed(object sender, FormClosedEventArgs e)
{
this.Close();
}
凑合看吧。不知道 csdn 产品方面还行不行。


你可以看到,应用程序主窗体是 Welcome 窗体,它打开 Login 窗体之后就会把自身 Hide。然后当 Logon 窗体关闭时,判断 Login 窗体的“允许登录 boolean 属性值,如果为允许登录,则关闭 Login窗口而打开 MainForm 窗体,否则关闭主窗体。

当打开 MainForm 的时候,它注册监听它的 Closed 事件,当业务主窗体 MainForm 窗体关闭时联动地、关闭 Welcome 进程主窗体。
  • 打赏
  • 举报
回复
不要随便抄那些阻塞、Sleep 的代码。

开机假设有3个Form,那么你可以按照他们自然的顺序加载它们。例如
        [STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Welcome());
}
    public partial class Welcome : Form
{
public Welcome()
{
InitializeComponent();
}

private void timer1_Tick(object sender, EventArgs e)
{
var f = new Login();
f.FormClosed += F_FormClosed;
f.Show();
this.Hide();
}

MainForm m;

private void F_FormClosed(object sender, FormClosedEventArgs e)
{
var f = (Login)sender;
if (f.允许登录)
{
m = new MainForm();
m.CurrentUser = f.CurrentUser;
m.Show();
f.Close();
m.FormClosed += M_FormCl
项目名称:高仿QQ2013通讯DEMO-10.30更新 版本号:10.30 最新版本 下载内容: (C#)CC2013局域网通讯源码一份, 可引用至工具箱最新版CSkin.dll-10.30版本界面库一份。 界面库更新说明: CC2013-10.30 1.由于SkinForm名字太多人使用,界面库命名正式改为CSkin.dll,官网www.cskin.net。 2.SkinTabControl标签中添加菜单箭头,可点击展开菜单。 3.SkinTabControl添加标签关闭按钮。 4.修复部分中文乱码问题。 5.优化好友列表右键菜单。 6.将窗体自定义系统按钮改为集合模式,可添加无数个自定义系统按钮。自定义系统按钮事件中可以 e.参数 来判断。 7.增加360安全卫士-DEMO案例。 8.增加SkinAnimatorImg控件,用于支持位图动画的播放。如360的动态logo。 9.各种细节BUG优化。 CC2013-10.11 1.添加SkinTabControlEx,加入更加自定义的美化属性和动画效果。 2.添加SkinAnimator,通用动画控件。 3.添加Html编辑器控件 4.修复SkinButton图标和文本相对位置的BUG CC2013-9.26 1.优化好友列表CPU占用 2.好友列表加入好友登录平台属性:安卓 苹果 WEBQQ PC 3.优化标题绘制模式,新添标题绘制模式属性。 4.新添标题偏移度属性。 5.加入圆形进度条控件:ProgressIndicator。 CC2013-9.5.2 1.优化截图控件,截图工具栏加入新功能。 2.解决个人信息卡和天气窗体显示后不会消失的问题。 3.各种细节BUG优化。 CC2013-9.5.1 1.解决贴边左右隐藏的BUG。 2.解决窗体点击事件不能触发的问题。 3.优化SkinButton继承父容器背景色的代码。 4.解决SkinButton异常错误。 CC2013-9.3 1.好友列表右键菜单没反应问题。 2.新增美化控件SkinDatagridview。 3.密码软件盘回删不了文字问题。 4.双击窗体最大化,最大化后再双击恢复原大小,(win7)。 5.部分细节调优。 实现功能: 1.界面库中多达25个自定义换肤控件,让每个控件设设属性就能达到你想要的效果,支持图片换肤和色调绘制。 2.四边阴影,毛边效果,可以设置阴影宽度和阴影颜色,支持所有系统。 3.拥有密码键盘输入,防护更贴心。 4.8种圆角窗体模式供你选择,淋漓尽致,润滑如圆。 5.登录界面后,有登陆提示窗,提示上次登录的城市和间。 6.皮肤随心变:拖动任意一张图片界面,就可以改变皮肤。 7.皮肤色调获取:改变皮肤的同,将计算图片色调,再将其运用到窗体背景色。 8.皮肤尾部渐变:上下左右方均可实现,渐变皮肤。 9.皮肤拖拉方向:可以选择皮肤在拉伸的候,粘着哪一边拖拉。 10.GDI+界面重绘,处理消息机制,3种移动模式和拉伸是否启用只需要设置一个属性的事就可以解决。 11.界面渐变闪现和闪退:不再像平凡的突然出现,采用API渐变机制,渐渐出现和消失,win7系统下还有动态缩小至任务的效果。 12.完美好友列表,可添加上千好友,不卡不掉线,还可以拖动好友到其他分组。 13.好友悬浮至头像可以查看详细资料卡。 14.窗口可调渐变后透明度:让窗体看起来更像是Vista玻璃窗体风格。 15.聊天窗口可发送图片,大文件,表情,还有震动。 16.按钮控件背景色拥有继承窗体背景色调的功能,让整体色调保持一致。 17.更是有和如出一辙的扣扣截图。仿真度也达到100%,完美修复所有已知BUG。 18.聊天窗口,可以调字体颜色和字体样式等多项功能。 20.SkinLabel与SkinButton控件字体与窗体标题可以根据背景色暗亮度自动调节字体为黑还是白。 21.MessageBox提示框的美化,并继承调用窗口的色调与背景,MessageBox可所谓已达到帅气的不能再帅气的境界了。 22.天气皮肤自动变,所有窗体根据当地天气自动决定皮肤背景,CC最帅气功能之一。 23.个人资料卡及聊天窗体拥有动态CC秀展示。 24.界面拖动换肤的同,所关联的子窗体皮肤也会跟着变。 25.多线程大文件传输功能,支持无上限大文件传输,有进度条显示进程度。 26.界面库已封装了大图取色调,颜色判断暗亮等多项功能。 27.如果你觉得获取天气让你的登录太慢不想要的话,注释相关调用方法即可快速登录。 界面库交流群:306485590 本人QQ:345015918 注意: Demo版不包括更新,为方便用户查看和使用属性等方法,dll只轻微加密。想反编译的就不要尝试了,里面有上百个类,改错改到你哭。 介意购买正版,永久更新配源码。 看截图或者想购买商业版的用户请访问以下地址: http://www.51aspx.com/code/TotalLikeQQ2013 特权:购买商业版的用户,有权利享有最快的更新服务,第一间将最新版本的dll源码送到你手上。 使本项目源码或本项目生成的DLL前请仔细阅读以下协议内容,如果你同意以下协议才能使用本项目所有的功能,否则如果你违反了以下协议,有可能陷入法律纠纷和赔偿,作者保留追究法律责任的权利。 1、你可以在开发的软件产品中使用和修改本项目的源码和DLL,但是请保留所有相关的版权信息。 2、不能将本项目源码与作者的其他项目整合作为一个单独的软件售卖给他人使用。 3、不能传播本项目的源码和DLL,包括上传到网上、拷贝给他人等方式。 4、以上协议暂定制,由于还不完善,作者保留以后修改协议的权利。 间:2013-7-5 作者: 乔克斯 请保留以上版权信息,否则作者将保留追究法律责任。

111,125

社区成员

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

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

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