【问题标题】:Windows Forms fullscreen on drag to top of screen?Windows Forms全屏拖动到屏幕顶部?
【发布时间】:2018-02-04 18:58:47
【问题描述】:

我制作了一个带有关闭和全屏按钮的自定义窗口,效果很好。窗口也是可拖动的。

但是,如果我将窗口拖到屏幕顶部,它会变成全屏,反之亦然。

  public partial class Form1 : Form
{
    public Boolean fullScreenCheck = false;
    public Point mouseLocation;
    public Form1()
    {
        InitializeComponent();
    }


    private const int SnapDist = 100;
    private bool DoSnap(int pos, int edge)
    {
        int delta = pos - edge;
        return delta > 0 && delta <= SnapDist;
    }

    protected override void OnResizeEnd(EventArgs e)
    {
        base.OnResizeEnd(e);
        Screen scn = Screen.FromPoint(this.Location);
        if (DoSnap(this.Left, scn.WorkingArea.Left)) this.Left = scn.WorkingArea.Left;
        if (DoSnap(this.Top, scn.WorkingArea.Top)) this.Top = scn.WorkingArea.Top;
        if (DoSnap(scn.WorkingArea.Right, this.Right)) this.Left = scn.WorkingArea.Right - this.Width;
        if (DoSnap(scn.WorkingArea.Bottom, this.Bottom)) this.Top = scn.WorkingArea.Bottom - this.Height;
    }

private void panel1_MouseDown(object sender, MouseEventArgs e)
    {
        mouseLocation = new Point(-e.X, -e.Y);
    }

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        if(e.Button == MouseButtons.Left)
        {
            Point mousePose = Control.MousePosition;
            mousePose.Offset(mouseLocation.X, mouseLocation.Y);
            Location = mousePose;
        }
    }

    private void button1_MouseClick(object sender, MouseEventArgs e)
    {
        this.Close();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if(fullScreenCheck == false) { 
            WindowState = FormWindowState.Maximized;
            fullScreenCheck = true;
        }
        else
        {
            WindowState = FormWindowState.Normal;
            fullScreenCheck = false;
        }
    }
}

我试图添加这个,但仍然没有工作...:(

【问题讨论】:

    标签: c# windows fullscreen


    【解决方案1】:

    在 Windows 10 上,当您将窗口拖到屏幕顶部时,只需创建一个默认窗口窗体就会自动全屏显示。 您希望在哪个 Windows 版本上实现此功能?

    【讨论】:

    • 10.但它不起作用。我认为这是因为我制作了一个自定义窗口。还有办法实现吗?
    • 你能发布你的代码吗?你检查过这个答案吗? stackoverflow.com/questions/589268/…
    • @xavave 这应该是评论,而不是答案。
    • @CodingYoshi 我不知道;谢谢,下次我会考虑这个的
    【解决方案2】:

    我觉得你需要试试这个

    public partial class Form1 : Form {
        public Form1() {
          InitializeComponent();
        }
        private const int SnapDist = 100;
        private bool DoSnap(int pos, int edge) {
          int delta = pos - edge;
          return delta > 0 && delta <= SnapDist;
        }
        protected override void  OnResizeEnd(EventArgs e) {
          base.OnResizeEnd(e);
          Screen scn = Screen.FromPoint(this.Location);
          if (DoSnap(this.Left, scn.WorkingArea.Left)) this.Left= scn.WorkingArea.Left;
          if (DoSnap(this.Top, scn.WorkingArea.Top)) this.Top = scn.WorkingArea.Top;
          if (DoSnap(scn.WorkingArea.Right, this.Right)) this.Left = scn.WorkingArea.Right - this.Width;
          if (DoSnap(scn.WorkingArea.Bottom, this.Bottom)) this.Top = scn.WorkingArea.Bottom - this.Height;
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 2016-12-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多