C#实现程序一次打开两个窗口,两个窗口分别放置在两个屏幕

这是本人在编程中碰到的一个问题,寻找了其他案例,都只是同时打开两窗口,但不能实现在拥有两块显示屏时候,分别将两个不同的窗口显示在两个单独的屏幕。

源代码https://download.csdn.net/download/qq_42237381/10728021

目录

一、原理说明

二、具体操作

1.新建项目

2.添加新的form窗口

3.新建类

4.修改程序启动类


一、原理说明

 

实现的方法是添加一个类,这个类中的代码功能是使两个窗口同时运行

定义一个集合,将Form1和Form2放入集合,foreach遍历集合便可以实现同时打开两窗口功能,

 var formlist = new List<Form>() { new Form1(), new Form2() };

            foreach (var item in formlist)
            {
                item.Show();

            }

Screen函数是关于当前显示屏幕的集合,这样将窗口启动的起始位置设置为某块屏幕就能实现功能

Screen[] sc = Screen.AllScreens;

设定窗口起始位置StartPosition属性由窗口的位置location属性决定,使用下面的语句就可以 

f2.StartPosition = FormStartPosition.Manual;

然后在将窗口的位置属性location设置到屏幕2上

  f2.Location = new Point(sc[1].Bounds.Left, sc[1].Bounds.Top);

这样就可以实现需求了 

二、具体操作

具体操作如下

1.新建项目

新建winform项目,

2.添加新的form窗口

此时已经有一个窗口Form1,这时在解决方案管理器窗口右键项目名称添加一个窗口类Form2

3.新建类

再和上面操作一样添加一个类class1.cs

类里面写运行两窗口的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;

namespace TwoWinform
{
    class class1 : ApplicationContext
    {


        private void onFormClose(object sendr, EventArgs e)
        {

            if (Application.OpenForms.Count == 0)
            {
                ExitThread();
            }
        }


        public class1()
        {
            Screen[] sc = Screen.AllScreens;


            窗口2显示在屏幕2
            Form2 f2 = new Form2();
            f2.StartPosition = FormStartPosition.Manual;
            f2.Location = new Point(sc[1].Bounds.Left, sc[1].Bounds.Top);

            var formlist = new List<Form>() { new Form1(), f2 };

            foreach (var item in formlist)
            {
                item.Show();

            }
        }

    }
}

4.修改程序启动类

再修改程序启动类program使运行class1.cs即可 

using Microsoft.VisualBasic;
namespace AntiUAV
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。      
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new class1()) ;//运行双窗口类
            
        }
    }
}

此案例可以应用到很多地方,比如超市收款机上两屏幕,解决一个对客户,一个对收款员两个显示不同情况下的需求。

此案例可以扩展到多个屏幕,不管多少屏幕都能实现。

  • 11
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,你需要在数据库中创建一个用户表来存储用户信息,例如用户名、密码和其他相关信息。然后,你需要编写一个登陆窗口和主窗口的代码。 在登陆窗口中,你需要编写代码来验证用户输入的用户名和密码是否正确。如果正确,你可以将用户的信息存储在一个变量中,并在主窗口中使用这些信息。 在主窗口中,你可以根据用户的信息从数据库中检索相关的数据,并在窗口中显示这些数据。以下是一个简单的示例代码: ``` // 登陆窗口代码 private void btnLogin_Click(object sender, EventArgs e) { string username = txtUsername.Text; string password = txtPassword.Text; // 连接数据库并查询用户信息 string connectionString = "Data Source=YOUR_DATABASE_SERVER;Initial Catalog=YOUR_DATABASE_NAME;Integrated Security=True"; string query = "SELECT * FROM Users WHERE Username='" + username + "' AND Password='" + password + "'"; SqlConnection connection = new SqlConnection(connectionString); SqlCommand command = new SqlCommand(query, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); // 如果用户存在,则保存用户信息并打开窗口 if (reader.HasRows) { reader.Read(); int userId = reader.GetInt32(0); string userFullName = reader.GetString(1); // 保存用户信息到变量中 User currentUser = new User(userId, username, userFullName); // 打开窗口,并传递用户信息 MainForm mainForm = new MainForm(currentUser); mainForm.Show(); this.Hide(); } else { MessageBox.Show("Invalid username or password"); } reader.Close(); connection.Close(); } // 主窗口代码 public partial class MainForm : Form { private User currentUser; public MainForm(User user) { InitializeComponent(); // 保存当前用户信息 currentUser = user; // 根据用户信息从数据库中检索相关数据 string connectionString = "Data Source=YOUR_DATABASE_SERVER;Initial Catalog=YOUR_DATABASE_NAME;Integrated Security=True"; string query = "SELECT * FROM UserData WHERE UserId=" + currentUser.Id; SqlConnection connection = new SqlConnection(connectionString); SqlCommand command = new SqlCommand(query, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); // 在窗口中显示相关数据 if (reader.HasRows) { reader.Read(); string userData = reader.GetString(1); txtData.Text = userData; } reader.Close(); connection.Close(); } } // 用户类 public class User { public int Id { get; set; } public string Username { get; set; } public string FullName { get; set; } public User(int id, string username, string fullName) { Id = id; Username = username; FullName = fullName; } } ``` 在这个示例代码中,我们假设用户表中有两个列:Id、Username、Password和FullName。我们还假设UserData表中有两个列:UserId和Data。 在登陆窗口中,我们首先获取用户输入的用户名和密码,并使用这些信息查询用户表。如果用户存在,则我们将其信息存储在一个User对象中,并打开窗口。否则,我们显示一个错误消息。 在主窗口中,我们首先在构造函数中保存当前用户信息。然后,我们使用这些信息从数据库中检索UserData表中的相关数据,并在窗口中显示它。 请注意,这只是一个简单的示例代码,你需要根据你的特定需求进行修改。还要注意安全性问题,例如使用参数化查询来防止SQL注入攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值