winform 创建一个在所有窗体之前的窗体

aegisho 2012-11-21 10:04:14
大概功能说明;
1.打开主窗体的时候在右下角 附加一个FormA,需要这个窗体始终处于前端而且可用。
2.在主窗体打开其他模态窗体的时候,这个FormA也要处于活动状态。

主要的问题就是第二步
我设置了 FormA的 TopMost 属性 但是在 主窗体打开模态窗体的时候无效
我还尝试 打开模态窗体的时候 ,设置FormA 的 Owner 属性为打开的窗体,同样无效

目前的做法 在模态窗体的load事件中关闭原来的窗体 重新show 一个 FormA 出来

类似代码
if (FormA!= null)
{
int height = FormA.Height;
Point p = FormA.Location;
FormA.Close();

FormA= new FormA();
FormA.Height = height;
FormA.Location = p;
FormA.Show();
}


能实现我的需求,但是总觉得别扭,而且存在刷新窗体的闪烁情况
求指教 简便的方法

ps:考虑过不使用窗体而是使用一个用户控件 这样就可以直接设置Parenet属性来解决 问题在于该控件如何在窗体外显示?
还考虑过使用一个新的程序,但是这个窗体需要和当前的系统进行通信,分离出来过于复杂
...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aegisho 2012-11-22
  • 打赏
  • 举报
回复
引用 4 楼 haukwong 的回复:
Thread th = new Thread(() => { FormA fa = new FormA(); fa.TopMost = true; Application.Run(fa); }); th.Start();
这个窗体是需要在主窗体做过逻辑判断之后才创建的 ,所以存在跨线程的问题 运行错误提示 线程间操作无效: 从不是创建控件“MainForm”的线程访问它。
Hauk 2012-11-22
  • 打赏
  • 举报
回复
Thread th = new Thread(() => { FormA fa = new FormA(); fa.TopMost = true; Application.Run(fa); }); th.Start();
aegisho 2012-11-22
  • 打赏
  • 举报
回复
引用 1 楼 haukwong 的回复:
把FormA用一个单独的线程来启动就Ok了,主窗体模态显示其他子窗体的时候,不会受影响。 C# code?123456 Thread th = new Thread(() => { Application.Run(new FormA()); }); th.Start();//或者 Thread th2 =……
能详细说明一下吗? 我在主窗体的load事件中使用线程创建FormA 提示是“线程间操作无效: 从不是创建控件“”的线程访问它。” 网上找了一下 使用BeginInvoke 但还是出现了原来的情况 主窗体打开模态窗体的时候 还是无法使用
ComeBeer 2012-11-21
  • 打赏
  • 举报
回复
将FormA窗体的TopMost设为True,
Hauk 2012-11-21
  • 打赏
  • 举报
回复
把FormA用一个单独的线程来启动就Ok了,主窗体模态显示其他子窗体的时候,不会受影响。

            Thread th = new Thread(() => { Application.Run(new FormA()); });
            th.Start();
//或者
            Thread th2 = new Thread(() => { new FormA().ShowDialog(); });
            th2.Start();

110,561

社区成员

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

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

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