C# 在不减少其他窗口的情况下,将窗口窗体、窗体置于前面
嗨,我对C#比较陌生,对windows窗体也完全陌生,我基本上是在尝试创建一个潜意识的消息传递程序,它会在一定的时间间隔内快速显示一条消息,然后再次隐藏 我已经设法通过浏览其他各种帖子创建了另一个表单,该表单将弹出,然后使用C# 在不减少其他窗口的情况下,将窗口窗体、窗体置于前面,c#,winforms,C#,Winforms,嗨,我对C#比较陌生,对windows窗体也完全陌生,我基本上是在尝试创建一个潜意识的消息传递程序,它会在一定的时间间隔内快速显示一条消息,然后再次隐藏 我已经设法通过浏览其他各种帖子创建了另一个表单,该表单将弹出,然后使用 msgObject.Activate(); 这就把形式带到了前面。然而,它阻止了我在工作时打字,我基本上想知道是否有可能在不中断我当前工作或打开或关闭其他窗口和任务的情况下,让某种消息或表单出现在我所有其他程序的前面。因为现在它把表格带到了所有东西的前面,但也会阻止我打字
msgObject.Activate();
这就把形式带到了前面。然而,它阻止了我在工作时打字,我基本上想知道是否有可能在不中断我当前工作或打开或关闭其他窗口和任务的情况下,让某种消息或表单出现在我所有其他程序的前面。因为现在它把表格带到了所有东西的前面,但也会阻止我打字等等
我不确定我目前使用表单的方法是否可以做到这一点,但如果有一种方法可以实现我所追求的结果,我将非常感谢找到答案
谢谢
下面是我要澄清的更多代码
public partial class FormHomePage : Form
{
private bool startSubliminal = false;
msg msgObject = new msg();
List<string> subliminalMessages = new List<string>();
public FormHomePage()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
if (startSubliminal)
{
msgObject.Show();
msgObject.BringToFront();
msgObject.Activate();
}
}
private void button1_Click(object sender, EventArgs e)
{
subliminalMessages.Add(txtBox1.Text);
msgObject.LabelText = txtBox1.Text;
txtBox1.Text = string.Empty;
startSubliminal = true;
msgObject.Show();
msgObject.BringToFront();
}
private void timer2_Tick(object sender, EventArgs e)
{
msgObject.Hide();
}
}
公共部分类表单主页:表单
{
私有bool startSubliminal=false;
msg msgObject=new msg();
List subliminalMessages=新列表();
公共网页(
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
}
私有无效计时器1_刻度(对象发送方,事件参数e)
{
如果(startSubliminal)
{
msgObject.Show();
msgObject.BringToFront();
msgObject.Activate();
}
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
subliminalMessages.Add(txtBox1.Text);
msgObject.LabelText=txtBox1.Text;
txtBox1.Text=string.Empty;
startsublinal=真;
msgObject.Show();
msgObject.BringToFront();
}
私有无效计时器2_刻度(对象发送方,事件参数e)
{
msgObject.Hide();
}
}
您如何在第一个位置显示第二个表单(消息表单)?您可能正在使用.Show()
(对吗?),这将使表单“窃取”焦点。这同样适用于.Activate()
和.BringToFront()
相反,您可以做的是显示消息表单并确保它位于当前表单的顶部,然后再次激活当前/主表单
像这样的方法应该会奏效:
var frm = new YourMsgForm();
frm.Show(this);
this.Activate();
下面是一个演示:
请注意,我使用了.Show(this)
而不是.Show()
,这是为了将当前表单设置为新表单的顶部,这样我们保证新表单将保持在当前表单的顶部。这相当于调用frm.Owner=This代码>然后frm.Show()代码>
另一种确保表单位于顶部的方法是设置属性,而不是Owner
属性。但是,这样做也会使新窗体位于其他窗口之上(不仅仅是您的应用程序)。只是想指出,显示窗口几乎不会是“潜意识的”。在显示窗口的动画之间,它看起来像一些奇怪的窗口/控件自动弹出和关闭。不是真正的“潜意识”,可能只是出现一个奇怪的错误。Activate
不会最小化其他窗口。问题是您的窗口将键盘焦点从您使用过的其他窗口移开了吗?如果是这样的话,Activate
就不是你想要的方式,因为它的全部目的就是集中注意力。(“激活窗体并使其具有焦点。”-)我不确定他们是否会做你想做的事,但你可以尝试Show
或BringToFront
来代替。激活是唯一一件似乎将我的表单带到前台的事情,它可能不会故意最小化其他窗口,但它会显示如果我启动一个全屏程序,例如gameHi感谢您的回复,当我尝试这个建议时,我在我的原始帖子下面添加了更多的主要表单代码,但它没有将表单放在我运行的所有其他程序的前面,因此它不适用于meI。我没有完全理解它。很抱歉,我现在重新阅读了它,最上面的程序修复了它。谢谢!现在,我将查看是否仍然可以在弹出的表单下单击。再次感谢。我不知道为什么不可以,但因为我一直在添加新功能并测试,在一些测试中潜意识消息出现的时间更长,我注意到每次消息出现时,它都会让我了解我正在做的事情,或者忽略我强调的事情,例如,这会打断我正在做的工作,这违反了我的观点节目。我仍然在使用:subliminalMessageForm.Show();subliminalMessageForm.TopMost=true;