我有两种形式:Form1和Form2。我使用:
打开Form2Form2 newForm2 = new Form2(this);
现在我想从Form1中访问一些公开设置的变量或方法,如:public int counter;
但是当我从Form2尝试这个时,它给了我一个错误:
Error 4 'System.Windows.Forms.Form' does not contain a definition for 'StartGame' and no extension method 'StartGame' accepting a first argument of type 'System.Windows.Forms.Form' could be found (are you missing a using directive or an assembly reference?)
编辑: 在表格1中:
Form2 newForm2 = new Form2(answer, button3, button4, button5, button6, this, fiftyfifty, web, change);
newForm2.Show();
表格2:
Form originalParent;
public Form2(int answer, Button button3, Button button4, Button button5, Button button6, Form parentform, int fiftyfifty, int web, int change)
{
InitializeComponent();
originalParent = parentform;
}
我试图像originalParent."public Method here"
那样访问它,它给了我这个错误。
答案 0 :(得分:3)
您的Form2
构造函数被定义为在构造函数中获取通用Form
作为参数。
您需要获取Form1
类型的表单,因此请将Form2
构造函数更改为:
private Form1 originalParent;
public Form2(
int answer, Button button3, Button button4,
Button button5, Button button6,
Form1 parentform, int fiftyfifty,
int web, int change)
{
InitializeComponent();
originalParent = parentform;
}
答案 1 :(得分:2)
根据您发布的代码,我假设您已为Form2
编写了一个构造函数,该构造函数采用Form
的实例。编辑此构造函数,以便它取代Form1
的实例。或者只是将Form
实例强制转换为Form1
。
答案 2 :(得分:0)
将ref转换为Form2中Form1的类型,然后访问Form1的公共函数。
答案 3 :(得分:0)
您需要在Form1的实例上调用StartGame,而不是System.Windows.Forms.Form。
如果Form1是Form2的所有者,那么您需要将所有者转换为Form1类型。如果Form1是Form2的Ctor的参数,那么您需要确保将Ctor参数定义为Form1类型并从Form2实例保留对Form1的引用。
答案 4 :(得分:0)
我假设您的Form2构造函数的this
参数是Form1
实例,因此从Form1调用此代码。
我还假设你有一个Form2 private Form _form1;
的私有成员,其值在构造函数中赋值。
如果这些假设是正确的,您可以通过将声明更改为private Form1 _form1;
来解决此问题。
您还需要将构造函数参数的类型从Form
更改为Form1
(更改为MusiGenesis)。
答案 5 :(得分:0)
您可以检查表单2是否获得定义变量的表单1的实例。一旦你获得了form1实例的实例ID,你就可以调用表单2,只需创建一个新表单1 ref。
即。 Form1 frm1; public find(Form1 callingform) { InitializeComponent(); frm1 = callingform; }
然后只需调用表格2 form2(this);
答案 6 :(得分:0)
取决于您为什么需要这样做,您还可以将所需的变量或方法定义为静态。在Form1上:
public static int counter;
在Form2上,您可以访问它而无需将父窗体实例作为参数传递给Form2构造函数,如下所示:
Form1.counter++;
答案 7 :(得分:0)
1-如果您需要{{1},请在控件的属性窗格上选择这些控件并将其修饰符设置为public。与他们互动。
2-这部分不是你问题的答案,但它可能会帮助你理解为什么你不应该像你一样做事。
我用几乎相同的代码制作了一个应用程序,但有人告诉我这不是一个好习惯,甚至不像OOP,所以I posted a question尝试学习更多。
看一下,这些代码可以帮助您设置不同的内容,甚至可以按照您尝试的方式进行设置。