【问题标题】:Secondary Monitor shows part of Primary Monitor辅助监视器显示主监视器的一部分
【发布时间】:2015-06-15 07:06:46
【问题描述】:

我创建了一个 win 应用程序,它使用辅助监视器显示图像。 我已经使用以下代码来检测和设置辅助监视器的位置(这是主监视器的扩展监视器)。

public void secondarydisplay()
{

    FrmSecondaryDisplay secdis = new FrmSecondaryDisplay();
    Screen[] screens = Screen.AllScreens;
    secdis.MyBase = this;
    this.MySecScreen = secdis;
    secdis.Show();
    setFormLocation(secdis, screens[1]);

}

private void setFormLocation(Form form, Screen screen)
{
    Rectangle bounds = screen.Bounds;
    form.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height);
    form.StartPosition = FormStartPosition.Manual;

}

问题是我在辅助显示器的最左角看到了这条 6 毫米的细白线。这不过是主显示的扩展。我如何让它消失?将光标移动到辅助监视器并单击辅助监视器的屏幕时,此白线消失。并将光标移回主监视器并单击它会使白线出现在辅助监视器上。请帮助我如何解决这个问题。它在辅助 mopnitor 中看起来很丑。

【问题讨论】:

  • 您在哪个版本的 Windows 上测试过这个?这篇 old new thing 博文(和 cmets)可能相关吗?

标签: c# multiple-monitors


【解决方案1】:

总是在Show()之前准备好窗口属性

public void Secondarydisplay()
{

    if (Screen.AllScreens.Count() == 1)
    {
        return; // No second display
    }

    var secdis = new FrmSecondaryDisplay();

    // Actually you shall use secdis.Show(this) to build the relation of the forms. 
    // When "this" closes, the second display form closes.
    secdis.MyBase = this; 
    this.MySecScreen = secdis;


    // Setup Windows Position before Show()
    secdis.StartPosition = FormStartPosition.Manual;
    secdis.Location = Screen.AllScreens[1].WorkingArea.Location;
    secdis.TopMost = true;
    secdis.FormBorderStyle = FormBorderStyle.None;
    secdis.WindowState = FormWindowState.Maximized;

    secdis.Show(this); // See comment above
}

【讨论】:

  • 取消注释 primaryscreen.windowstate = formwindostate.maximized 我解决了这个问题。但我仍然希望我的主屏幕也最大化。使用你的代码我可以满足我的两个要求.. 非常感谢 eric
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多