我怎么能做到这一点,当我/拖动/移动form1周围的新形式背后,它将与form1在同一时间移动

本文关键字:form1 移动 背后 新形式 同一时间 周围 当我 拖动 怎么能 这一点 | 更新日期: 2023-09-27 17:52:11

我不想看到新表单。我需要把它最大化,和form1一样大,但不能看到它。因此,当我用鼠标移动/拖动form1时,我需要它后面的新表单将与form1一起移动/拖动。

这是一个在form1中显示新表单的按钮点击事件:

private void BeginOperationBut_Click(object sender, EventArgs e)
        {
            if (this.imageList.Count == 0)
            {
                wbss = new WebBrowserScreenshots();
                wbss.Show();
            }
        }

wbss是新的形式。

我尝试在新的表单设计器设置属性锁定为True,但它没有改变任何东西。

我想做两件事:

  1. 新表单应该在form1后面显示/开始。
  2. 新表单应该被锁定,所以当我拖动/移动表单时,它也会移动新表单。所以我不会看到新的表单只有form1。

现在的方式是,当我点击按钮,新的表单显示在前面的form1

我怎么能做到这一点,当我/拖动/移动form1周围的新形式背后,它将与form1在同一时间移动

有很多事情需要考虑,以确保这是预期的工作。下面是一段你可以用来开始的代码片段:

public partial class FollowForm : Form {
    readonly Form _master;
    private FollowForm() {
        InitializeComponent();
    }
    public FollowForm(Form master) {
        if (master == null)
            throw new ArgumentNullException("master");
        _master = master;
        _master.LocationChanged += (s, e) => Location = _master.Location;
        _master.SizeChanged += (s, e) => Size = _master.Size;
        ShowInTaskbar = false;
    }
    protected override void OnShown(EventArgs e) {
        base.OnShown(e);
        Location = _master.Location;
        Size = _master.Size;
        _master.Activate();
    }
    protected override void OnActivated(EventArgs e) {
        _master.Activate();
    }
}

我尝试用ShowWithoutActivation属性进行实验,但结果与我预期的不同。

主要方面是跟踪主表单的大小或位置的变化,并相应地更新从表单的大小和位置。此外,在显示时将跟随表单发送到后台,并重新激活主表单。试试吧。这是来自一个。net 4.0项目,VS2013。

使用

public partial class MasterForm : Form {
    FollowForm _follower;
    public MasterForm() {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e) {
        _follower = new FollowForm(this);
        _follower.Show();
    }
}

关于no-activate特性的更好方法,请查看:

  • 显示表单而不窃取焦点?
  • 在所有东西后面显示表单,而不窃取焦点?