在不最小化其他窗口的情况下,将Windows窗体带到最前面

时间:2018-07-09 21:19:59

标签: c# winforms

嗨,我是C#的新手,对Windows窗体来说是新手,基本上是尝试创建一个潜意识的消息传递程序,该程序将在一定的时间间隔内快速显示一条消息,然后将其再次隐藏。

通过查看其他各种帖子,我设法创建了另一种表单,该表单会弹出,然后使用

快速隐藏
var fs = require('fs');
var path = [my directory];

function readFiles(dirname) {
  fs.readdir(dirname, function(err, filenames) {
    if (err) {
      return;
    }
    filenames.forEach(function(filename) {
        if (fs.lstatSync(dirname+'/'+filename).isDirectory() ){
            readFiles(dirname+'/'+filename);
        };
        fs.readFile(dirname+'/'+filename, { encoding: 'utf8' }, function(err, content) {
            if (err) {
                return;
            }
            //This is not very effective and I need to check each line for all these possible matches

            if (content.indexOf('http(') > -1) {

                    if(err) {
                        return console.log(err);
                    }
                    console.log(filename);

            }
        });
    });
  });
}

readFiles(path);

将表格置于最前面。但是,这使我无法在工作时进行输入,而我基本上是想知道是否有可能使某种消息或表格出现在我所有其他程序的最前面,而不会打扰我当前的工作或开放或关闭其他窗口和任务(如果有意义)。目前,它把表单带到了一切的最前面,但也使我无法输入等。

我不确定目前使用表单的方法是否可行,但是如果有办法实现结果,我将不胜感激

谢谢。

还有更多要澄清的代码

msgObject.Activate();

1 个答案:

答案 0 :(得分:3)

您如何首先显示第二个表单(消息表单)?您可能正在使用.Show() (对吗?),无论如何,这将使表单“窃取”焦点。 .Activate().BringToFront()也是如此。

相反,您可以做的是显示消息表单,并确保它停留在当前表单的顶部,然后再次激活当前/主表单。

类似的事情应该起作用:

var frm = new YourMsgForm();
frm.Show(this);
this.Activate();

这是一个示范:

Showing a secondary form without interrupting the current one.

请注意,我使用.Show(this)而非.Show(),是为了将当前表单设置为新表单的 Owner ,这样我们确保新表格将保持在当前表格的顶部。这等效于先叫frm.Owner = this;然后叫frm.Show();

另一种确保表单停留在顶部的方法是设置TopMost属性而不是Owner属性。但是,这样做也将使新表单也位于其他窗口的顶部(不仅仅是您的应用程序)。