C# 访问其他表单变量

C# 访问其他表单变量,c#,forms,C#,Forms,我正在用WinForms和控制台应用程序学习C。我在访问另一个forms变量时遇到问题。我没有声明新的表单对象,而是意识到要使用另一个表单中的变量,我需要使用包含该变量的同一个表单实例。更改表单后,Program.cs文件中出现了一个错误,似乎无法修复。我是C语言的新手,如果这是一个noob错误,请提前道歉。声明类的对象对我来说是新的:X 以下是表单背后的代码,您可以更好地理解: 建议: public partial class frmOptions : Form { f

我正在用WinForms和控制台应用程序学习C。我在访问另一个forms变量时遇到问题。我没有声明新的表单对象,而是意识到要使用另一个表单中的变量,我需要使用包含该变量的同一个表单实例。更改表单后,Program.cs文件中出现了一个错误,似乎无法修复。我是C语言的新手,如果这是一个noob错误,请提前道歉。声明类的对象对我来说是新的:X

以下是表单背后的代码,您可以更好地理解:

建议:

public partial class frmOptions : Form
    {
        frmHelp frmHelp1;

        public frmOptions(frmHelp frmHelp1)
        {
            InitializeComponent();
        }

        private void tbnDisplayHelp_Click(object sender, EventArgs e)
        {
            //frmHelp frmHelp = new frmHelp();        //Declare a new object for the Help form so it can be accessed
            frmHelp1.bAccessedFromForm = true;
            this.Close();
            frmHelp1.Show();
        }
frmHelp:

public partial class frmHelp : Form
{
    frmOptions frmOptions1;
    frmLoginCreate frmLoginCreate1;

    public bool bAccessedFromForm = false;

    public frmHelp(frmOptions frmOptions1, frmLoginCreate frmLoginCreate)
    {
        InitializeComponent();
    }

    private void btnOK_Click(object sender, EventArgs e)
    {
        //frmLoginCreate frmLoginCreate1 = new frmLoginCreate();
        this.Hide();
        frmLoginCreate1.Show();
    }

    private void frmHelp_Load(object sender, EventArgs e)
    {
        if (bAccessedFromForm == true)
        {
            btnOK.Hide();
            btnReturnToForm.Show();
        }
    }

    private void btnReturnToForm_Click(object sender, EventArgs e)
    {
        this.Hide();
        frmOptions1.Show();
        btnOK.Show();
    }
}
这是我的Program.cs文件:

static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmHelp());
        }
    }
这是我在program.cs文件中遇到的错误:

static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmHelp());
        }
    }
没有给出与所需的形式化参数相对应的参数 “frmHelp.frmHelpfrmOptions”的参数“frmOptions1”, frmLoginCreate'


您正在尝试创建frmHelp的新实例,但未传递任何参数

frmHelp类只有一个具有两个参数的构造函数:

public frmHelp(frmOptions frmOptions1, frmLoginCreate frmLoginCreate)
{
        InitializeComponent();
}
简单的答案是将上一个更改为:

public frmHelp()
{
    InitializeComponent();
}

由于您没有使用这两个参数进行任何操作,因此这不会直接回答您的问题,但可能有助于解决问题

我更喜欢使用,而不是正常的形式

举例来说:这只是一个例子来说明如何做到这一点

如果要将数据传递到另一个表单,可以使用DataHolder类

比如:

// dataholder class
public class MyDataHolder
{
    public string UserName { get; set; }
    public int MyId { get; set; }
    public List<double> Whatever { get; set; }
    public DateTime CreatedOn { get; set; }
}

// form1
public class Form1: Form
{
    // a field with a reference to the dataholder
    private MyDataHolder _myData;

    public Form1()
    {
        // create the data
        _myData = new MyDataHolder();
        _myData.UserName = "Unknown";
        _myData.CreatedOn = DateTime.Now;
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        // create the form2 and pass the data
        using(Form2 form2 = new Form2(_myData))
            form2.ShowDialog();
    }
}

public class Form2 : Form
{
    // a field with a reference to the dataholder
    private MyDataHolder _myData;

    public Form2(MyDataHolder myData)
    {
        // don't forget to assign it to the field
        _myData = myData;
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        // show the username
        MessageBox.Show(_myData.UserName);
    }
}
现在两个表单都引用相同的数据。这样,您就可以从Form1上的Form2中删除依赖项。因此,您也可以在其他表单中重用Form2,只要将有效的MyDataHolder传递给Form2,它就会运行。使用Form2的Form1和使用Form1的Form2的可重用性有限,您希望重用编写的代码,而不是重写代码-


我希望这将有助于您寻找……

frmHelp表单中唯一需要2个参数的构造函数,而您没有提供任何参数,请创建一个不需要任何参数的构造函数重载,这样就不会再有任何错误。在其他表单中,您需要哪些变量?你能更新你的代码吗?为字段和参数选择相同的名称会变得一团糟。我更喜欢在字段前面加上前缀_