C#表单不会填满整个屏幕

时间:2017-08-22 00:32:34

标签: c# winforms visual-studio-2017

我正在尝试在C#Windows窗体中制作Windows叠加层,但它不会填满我的设置中的第二个屏幕。我使用命令查找所有屏幕分辨率:

表格1:

    Rectangle a;
    Rectangle b;
    public Form1()
    {
        InitializeComponent();
        pictureBox1.Hide();
        pictureBox2.Hide();
        Positions();
        int i = 0;
        foreach (Screen S in AllScreens)
        {
            if (i == 0)
            {
                a = S.Bounds;
                i++;
            }
            else
            {
                b = S.Bounds;
            }
        }
        FormBorderStyle = FormBorderStyle.None;
        Work();
        IDK(b);
    }
    void Work()
    {
        Height = a.Height;
        Width = a.Width;
    }
    void MsgBox(string a)
    {
        MessageBox.Show(a);
    }
    void IDK(Rectangle b)
    {
        int showOnMonitor = 1;
        Screen[] sc;
        sc = AllScreens;
        Form2 f = new Form2(b)
        {
            FormBorderStyle = FormBorderStyle.None,
            Left = sc[showOnMonitor].Bounds.Left,
            Top = sc[showOnMonitor].Bounds.Top,
            StartPosition = FormStartPosition.Manual
        };
        f.Show();
    }
    void Positions()
    {
        label1.Location = new Point(
        Width / 2 - label1.Width / 2,
        Height / 2 - label1.Height - 40);
        label1.Anchor = AnchorStyles.None;
        button1.Location = new Point(
        Width / 2 - button1.Width / 2,
        Height / 2 - button1.Height + 40);
        button1.Anchor = AnchorStyles.None;
        linkLabel1.Location = new Point(
        Width / 2 - linkLabel1.Width / 2,
        Height / 2 - linkLabel1.Height + 500);
        linkLabel1.Anchor = AnchorStyles.None;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        LoadGUI();
        MsgBox(Width.ToString());
        MsgBox(Height.ToString());
    }
    void LoadGUI()
    {
        label1.Hide();
        button1.Hide();
        linkLabel1.Hide();
        pictureBox1.Show();
        pictureBox1.Location = new Point(20, 20);
        pictureBox1.Anchor = AnchorStyles.None;
        pictureBox2.Show();
        pictureBox2.Location = new Point(20, 188);
        pictureBox2.Anchor = AnchorStyles.None;
    }
    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        Application.Exit();
    }

表格2:

Rectangle a;
    public Form2(Rectangle b)
    {
        InitializeComponent();
        a = b;
        Work();
    }
    void Work()
    {
        Height = a.Height;
        Width = a.Width;
    }
    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        Application.Exit();
    }

问题是表格2不会填满整个第二个屏幕。 我不知道为什么屏幕没有完全填满,代码在前一天工作,但是在Windows更新后它崩溃了(我不知道这是不是问题。)。据我所知,这将永远不会有效...任何帮助将不胜感激。 -Alex

图片证明: Image (右下)

1 个答案:

答案 0 :(得分:2)

我设法复制了这个。我检查了屏幕WorkingArea与Bounds相比:

屏幕[0]

  

Screen \。\ DISPLAY1;

     

界限:{X = 0,Y = 0,宽度= 1920,高度= 1080};

     

工作区域:{X = 0,Y = 0,宽度= 1920,高度= 1040}

屏幕[1]

  

Screen \。\ DISPLAY2;

     

界限:{X = -1920,Y = -74,宽度= 1920,高度= 1080};

     

工作区域:{X = -1920,Y = -74,宽度= 1920,高度= 1080}

我认为它可能与Y-74有关,但这并不能解释宽度。

最终,经过一段时间的游戏,我设法让它按照你的意图展示,我也简化了一下。

实际修复不是设置表单大小,而是使用func configCell(_ label: String) { label_t.text = label if let sav = UserDefaults.standard.array(forKey: "switch") as? [String] { switch_t.isOn = sav.contains(label) } else { switch_t.isOn = false } } @IBAction func actionSwitch(_ sender: UISlider) { var labels = (UserDefaults.standard.array(forKey: "switch") as? [String]) ?? [] if let text = label_t.text { if switch_t.isOn { labels.append(text) } else { if let index = labels.indexOf(text) { labels.remove(at: index) } } UserDefaults.standard.set(labels, forKey: "switch") } } ,将屏幕边界传递给它。我把它包装在一个简单的函数中,你将它传递给表单和屏幕:

form.SetBounds()

然后我这样称呼它:

public static class SetScreen
{
    public static void setFormLocation(Form form, Screen screen)
    {
        Rectangle bounds = screen.Bounds;
        form.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height);
    }
}