C# 访问其他表单变量
我正在用WinForms和控制台应用程序学习C。我在访问另一个forms变量时遇到问题。我没有声明新的表单对象,而是意识到要使用另一个表单中的变量,我需要使用包含该变量的同一个表单实例。更改表单后,Program.cs文件中出现了一个错误,似乎无法修复。我是C语言的新手,如果这是一个noob错误,请提前道歉。声明类的对象对我来说是新的:X 以下是表单背后的代码,您可以更好地理解: 建议:C# 访问其他表单变量,c#,forms,C#,Forms,我正在用WinForms和控制台应用程序学习C。我在访问另一个forms变量时遇到问题。我没有声明新的表单对象,而是意识到要使用另一个表单中的变量,我需要使用包含该变量的同一个表单实例。更改表单后,Program.cs文件中出现了一个错误,似乎无法修复。我是C语言的新手,如果这是一个noob错误,请提前道歉。声明类的对象对我来说是新的:X 以下是表单背后的代码,您可以更好地理解: 建议: public partial class frmOptions : Form { f
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个参数的构造函数,而您没有提供任何参数,请创建一个不需要任何参数的构造函数重载,这样就不会再有任何错误。在其他表单中,您需要哪些变量?你能更新你的代码吗?为字段和参数选择相同的名称会变得一团糟。我更喜欢在字段前面加上前缀_