详解C#应用程序如何实现多屏显示

 更新时间:2024年05月02日 08:06:17   作者:anlog  
这篇文章主要为大家详细介绍了C#如何实现把主屏运行程序中多个窗体移动到各个扩展屏幕位置显示,感兴趣的小伙伴可以跟随小编一起学习一下

前言

随着业务发展,应用程序在一些特定场景下,只在一个显示器上展示信息已经不能满足用户需求。我们如何把主屏运行程序中多个窗体移动到各个扩展屏幕位置显示呢?C# 是通过什么方式来实现的,下面介绍 C# 使用 Screen 类的方式来实现。

详细

Screen 是在 System.Windows.Forms 下的一个类,它表示单个系统上的一个或多个显示设备。

属性

名称描述
AllScreens获取系统上所有显示器
Bounds获取显示的边界
Primary显示是否为显示器
PrimaryScreen获取主显示器
WorkingArea显示器的工作区

方法

下表是常用的一些方法:

名称描述
FromControl(Control)检索包含指定控件的最大部分的显示器。
GetBounds(Control)检索包含指定控件的最大部分的显示器的边界。
GetWorkingArea(Control)检索包含指定控件的最大区域的显示器工作区。

注意:Screen 只适用于.NET 4.8.1 以下或.NET 7 以上的Windows 桌面应用程序。

示例

 本示例在第二个显示屏同步显示主屏扫描产品后显该产品的图片,方便操作人员更清晰的核对产品信息。示例也用多了C#事件知识点。

参数用于传递信息

using System;
using System.Drawing;


namespace Fountain.WinForm.MultiMonitor
{
    /// <summary>
    /// 事件参数
    /// </summary>
    public class SyncEventArg : EventArgs
    {
        /// <summary>
        /// 产品编码
        /// </summary>
        public string ProductNo { get; set; }
        /// <summary>
        /// 产品图片
        /// </summary>
        public Image ProductImage { get; set; }
    }
}

辅助显示界面

using System;
using System.Windows.Forms;


namespace Fountain.WinForm.MultiMonitor
{
    public partial class SecondForm : Form
    {
        public SecondForm()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 响应事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        internal void SysncTextChaned(object sender, EventArgs e)
        {
            try
            {
                //取到主窗体的传来的文本
                SyncEventArg arg = e as SyncEventArg;
                this.LabelTrackingNo.Text = arg.ProductNo;
                this.PictureBoxProduct.Image = arg.ProductImage;
            }
            catch
            {
            }
        }
    }
}

程序主界面

using System;
using System.Drawing;
using System.Windows.Forms;


namespace Fountain.WinForm.MultiMonitor
{
    public partial class MainForm : Form
    {
        //使用默认的事件处理委托,定义消息发布者事件
        public event EventHandler SendMsgEvent;
        /// <summary>
        /// 
        /// </summary>
        public MainForm()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainForm_Load(object sender, EventArgs e)
        {
            try
            {
                SecondForm secondForm = new SecondForm();
                // 事件的订阅 
                SendMsgEvent += secondForm.SysncTextChaned;


                // 获取系统上所有显示器
                Screen[] screens = Screen.AllScreens;
                // 判断多屏
                if (screens.Length >1 ) 
                {
                    // 获取第二个屏幕
                    Screen screen = screens[1];
                    secondForm.StartPosition = FormStartPosition.Manual;
                    // 在 第二个屏幕 显示第二个窗体
                    secondForm.Location = screen.Bounds.Location;
                }
                // 显示辅助界面
                secondForm.Show();
            }
            catch 
            {
            }   
        }
        /// <summary>
        /// 文本输入框回车事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TextBoxProductNo_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.KeyCode != Keys.Enter)
                {
                    return;
                }
                if (string.IsNullOrEmpty(this.TextBoxProductNo.Text))
                {
                    return;
                }
                Image image = Image.FromFile("P000001.png");
                // 事件触发通知
                SendMsgEvent(this, new SyncEventArg() { ProductNo = this.TextBoxProductNo.Text, ProductImage = image });
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

小结

以上是使用C#中Screen类来实现桌面应用程序不同界面在多个显示器上展示信息。希望通过本文的简单案例能扩展大家思路。

到此这篇关于详解C#应用程序如何实现多屏显示的文章就介绍到这了,更多相关C#多屏显示内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#创建缩略图操作类实例

    C#创建缩略图操作类实例

    这篇文章主要介绍了C#创建缩略图操作类,实例分析了C#创建缩略图的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C#获取Windows10屏幕缩放比例的操作方法

    C#获取Windows10屏幕缩放比例的操作方法

    这篇文章主要介绍了C#获取Windows10屏幕的缩放比例,接下来介绍如何获取Display resolution中显示的实际分辨率,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • C#生成带logo的二维码

    C#生成带logo的二维码

    带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码。本文对此进行介绍,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • c# for循环中创建线程执行问题

    c# for循环中创建线程执行问题

    这篇文章主要介绍了有关c# for循环中创建线程执行问题,下面文章将将以举例的方式展开for循环中创建线程执行问题的内容,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • C#中BackgroundWorker类用法总结

    C#中BackgroundWorker类用法总结

    本文详细讲解了C#中BackgroundWorker类用法总结,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C# 手写识别的实现示例

    C# 手写识别的实现示例

    本文主要介绍了C# 手写识别的实现示例,文章详细介绍了如何使用C#语言调用OpenCV库实现手写识别,并通过示例程序展示了整个手写识别过程,感兴趣的可以了解一下
    2023-08-08
  • WinForm实现程序一段时间不运行自动关闭的方法

    WinForm实现程序一段时间不运行自动关闭的方法

    这篇文章主要介绍了WinForm实现程序一段时间不运行自动关闭的方法,涉及WinForm计时器及进程操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • C#基础学习系列之Attribute和反射详解

    C#基础学习系列之Attribute和反射详解

    大家在使用Attribute的时候大多需要用到反射,所以放在一起。下面这篇文章主要给大家介绍了关于C#基础学习系列之Attribute和反射的相关资料,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • C#创建二叉搜索树的方法

    C#创建二叉搜索树的方法

    这篇文章主要介绍了C#创建二叉搜索树的方法,涉及C#二叉搜索树的实现技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • VsCode使用EmmyLua插件调试Unity工程Lua代码的详细步骤

    VsCode使用EmmyLua插件调试Unity工程Lua代码的详细步骤

    这篇文章主要介绍了VsCode使用EmmyLua插件调试Unity工程Lua代码,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论