我正在尝试在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 (右下)
答案 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);
}
}