极品分享

C# WPF中,登陆窗口与主窗口切换及数据传递的最佳解决方案!

众所周知,在一般的WinForm程序设计时,登录成功后登录窗口与主窗口的切换上,大多使用的方法有两种。


第一种:

默认是登录窗体,登录成功后,利用全局变量传递登录信息,然后登录窗口关闭,显示主窗体。

第二种:

默认是主窗体,在主窗体初始化前,显示登录窗体,登录成功后,利用全局变量传递登录信息,然后关闭登录窗体,继续完成初始化主窗体和显示内容。


在WPF中实际上可以更简单,方法如下:


1、定义一个全局类 Globals.cs 用全局静态变量来存储登录帐号信息,内容如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WPF_Test_LoginForMain
{
    public class Globals
    {
        private static string _UserName = "";
        public static string UserNam
        {
            get { return _UserName; }
            set { _UserName = value; }
        }
    }
}

2、程序默认运行是登录窗体,登录成功的处理如下:

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            if (textBox1.Text.Equals("test") && textBox2.Text.Equals("test"))
            {
                //将登录信息写入全局静态变量
                Globals.UserName = textBox1.Text;
                //提示
                MessageBox.Show(Globals.UserName + "你好,登录成功!");
                //创建主窗口对象
                MainWindow mwin = new MainWindow();
                //指定程序的主窗口为上述对象
                Application.Current.MainWindow = mwin;
                //关闭当前登录窗体
                this.Close();
                //显示程序主窗体
                mwin.Show();
            }
            else
            {
                MessageBox.Show("二货,用户名密码错了!");
            }
        }

3、在主窗体(或程序中任意位置)通过get全局静态变量获取当前登录信息。

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            textBlock1.Text = Globals.UserName + " 你好,欢迎使用!";
        }
    }


这样,就不用在做窗体间的数据传递了。



附:Application.Current的使用


WPF程序对应一个Application对象,当前的Application对象可以通过Application.Current获取,通过获取到的Application对象,我们可以做以下的事情:


1.Application.Current.FindResource("资源名");        //获取程序中定义的资源

2.Application.Current.MainWindow;                      //获取程序中定义的主窗体

3.Application.Current.Properties["MyProperty"];    //获取或设置应用范围的属性

4.Application.Current.Shutdown();                      //终止当前程序

5.Application.Current.ShutdownMode =

   ShutdownMode.OnLastWindowClose ;              //设置程序关闭的方式

   OnLastWindowClose —— 最后一个窗体关闭时关闭程序

   OnMainWindowClose —— 主窗体关闭时关闭程序

  OnExplicitShutdown —— 需要显示调用Application.Current.Shutdown()去关闭程序,否则程序将在后台继续运行

6.Application.Current.Windows;                          //获取程序中运行的所有窗体


一般主窗体会是第一个运行的窗体,因此此时Application.Current.Windows[0]等同于Application.Current.MainWindow


2017-03-02 0 /
NET学习
/
标签: 

评论回复

回到顶部