【问题标题】:How would I go About Getting a Global Variables value in another form?我将如何以另一种形式获取全局变量值?
【发布时间】:2020-06-03 21:20:16
【问题描述】:

所以我是编程新手,我在 Visual Studios c# Windows 应用程序表单中工作, 我在第一个表单上有一个按钮,当按下时需要将 Glabel Bool 设置为 true,同时还打开第二个表单。

在第二个表单启动时,我需要它来判断该布尔值是设置为 true 还是 false,以启用按钮(在第二个表单上)或保持禁用(如果为 False。

这是第一个表单代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Project
{
    public partial class FirstPage: Form
    {
        public FirstPage()
        {
            InitializeComponent();
        }

        public bool IsManager = false;

        public static class Global
        {
            public static bool IsManager = false;
        }

        private void Button_Btn_Click(object sender, EventArgs e)
        {
            this.hide();  
            Form2 f2 = new form2(IsManager);
            f2.ShowDialog();

            IsManager = true;
        }
    }
}

这是我的第二个表单代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Project
{
    public partial class SecondPage : Form
    {
        public FirstPage()
        {
            InitializeComponent();
            IsManager = isManager;
        }
        private bool isManager;

        private void setButtonVisibility()
        {
            if(isManager == true)
            {
                MessageBox.Show("Button Message Display")
            }
        {


        //Need to check if the Global variable is true or false on page load to set a button to either enabled or disabled
    }
}

希望这是有道理的,如果不让我知道:) 谢谢!

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    您可以通过将变量传递给第二种形式的构造函数来完成此操作。 假设您要将IsManager 值发送到第二种形式。在将值传递给构造函数时调用第二种形式:

    Form2 f2 = new Form2(IsManager);
    

    在第二种形式中,读取值:

    public partial class Form2 : Form
    {
        private bool IsManager;
        public Form2(bool isManager)
        {
            InitializeComponent();
            IsManager = isManager;
        }
        //Render button or whatever based on IsManager value;
    }
    

    编辑:检查按钮是否需要启用:

    public partial class Form2 : Form
    {
        private bool IsManager;
        public Form2(bool isManager)
        {
            InitializeComponent();
            IsManager = isManager;
            setButtonVisibility(); //call method setVisibility() -> this is what was missing in your code
    
        }
        private void setButtonVisibility()
        {
            if(IsManager == true)
            {
                MessageBox.Show("Button Message Display");
                //or YourButton.Enable = true; in order to enable it.
            }
        }
    }
    

    在您的第二种形式中,有几个问题:

    • 类名和构造函数名不相同;
    • Form2 构造函数的参数丢失;
    • 应该为 isManager 分配 IsManager 的值,该值应该作为参数传递给构造函数。

    【讨论】:

    • @Jaydon 变量名区分大小写。该行应该是 IsManager = isManager
    • 您可以通过向Form2构造函数SetButtonVisibility()添加一个新方法来启用或禁用按钮,在此方法中您将检查IsManager的值,然后执行if (IsManager == true) { YourButton.Enable = true; }之类的操作
    • 是的,你可以试试,记得在Form2 构造函数中调用setButtonVisibility(),在IsManager = isManager 行之后
    • @Jaydon 我已经编辑了我的答案以包含方法setButtonVisibility()
    • 不,这是我的答案。我已经编辑了我的答案以包含您的示例中缺少的代码。再读一遍……
    【解决方案2】:

    好吧,在阅读了您的问题后,我假设您正在尝试为全局 bool IsManager 设置一个值,并希望根据该值以另一种形式执行一些操作。

    您可以通过多种方式来实现这一点,一种是在第二种形式的构造函数中传递您的全局布尔值,就像这样

    public partial class SecondPage: Form
    {
        bool _isManager;
        public SecondPage(bool IsManager)
        {
            InitializeComponent();
           _isManager = IsManager; // the problem was isManager as mistakenkly i used small "i" 
        }
    }
    

    并从第一种形式传递值,如

     private void Button_Btn_Click(object sender, EventArgs e)
     {
        this.hide();  
        IsManager = true;
        Form2 f2 = new form2(IsManager);
        f2.ShowDialog();
     }
    

    【讨论】:

    • 好的,同时尝试您的解决方案这部分代码:_isManager = isManager;以红色突出显示并且显示在当前上下文中不存在,并且使用此解决方案我需要保留我的这部分代码: public static class Global //使任何变量全局共享以跨表单共享 { public static bool IsManager = false ; //设置全局字符串 }
    • 虽然我认为您已经得到了答案,但您需要将 _isManager = isManager 替换为 _isManager = IsManager。我也为您编辑了答案。变量区分大小写
    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2016-01-17
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多