我是C#
的新手,我无法从另一个文件中找出到达变量,表单属性和其他一些驻留在一个文件中的方法。我觉得,这应该像#include
指令一样简单,但找不到方法。
这是我在VS中创建新的Windows窗体应用时由auto创建的文件Form1.cs
中的代码。我可以访问位于另一个名为Class1.cs
的文件中的类定义;这里没问题:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace reach_test {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
Class1 formName = new Class1(); // this line compiles OK.
formName.someMethod(); // this line compiles OK.
this.Text = "Some Header"; // this line compiles OK.
}
}
}
这是Class1.cs
文件中的代码,我之后添加了该代码。例如,我无法访问Form1.Text
属性,它位于文件Form1.cs
中:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace reach_test {
public class Class1 {
public string myText;
public Class1() {
myText = "Windows Header";
}
public void someMethod() {
Form1.Text = myText; // this line does not compile!
}
}
}
错误讯息为:An object reference is required for the non-static field, method, or property 'System.Windows.Forms.Control.Text.get'
答案 0 :(得分:1)
根据您的代码Form1
是类名,因此静态属性只能以这种方式访问。 Text
属性未声明为static
,这就是您必须创建实例的原因:
Form1 myForm = new Form1(); // <- myForm is an instance of Form1 class
myForm.Text = myText;
// Probably, you want to do it as well...
myFrom.Show();
答案 1 :(得分:1)
当你说
时 Form1.Text = myText; // this line does not compile!
您试图在Class1中调用ClassName.PropertyName
,这是错误的,因为它应该是InstanceName.PropertyName
。除此之外,您无法访问Class1中的Form1实例。
你能做的最好的事情是
public class Class1 {
public string myText;
public Class1() {
myText = "Windows Header";
}
}
private void Form1_Load(object sender, EventArgs e) {
Class1 formName = new Class1();
this.Text = formName.myText;
}
如果您确实要在Form1.Text
内设置Class1
,那么您应该将Form1的实例传递给Class1
,如下所示。
public class Class1 {
private string _myText;
private Form _form1;
public Class1(Form form1) {
_myText = "Windows Header";
_form1 = form1;
}
public DoSomething(){
_form1.Text = _myText;
}
}
private void Form1_Load(object sender, EventArgs e) {
Class1 formName = new Class1();
formName.DoSomething();
}
答案 2 :(得分:1)
在C#Windows窗体应用程序中,如果要访问Form的属性,则每个Forms都是一个类 你必须创建一个像这样的对象:
Form1 myForm = new Form1();
myForm.Show()
然后设置公共财产
myForm.Text = "My text";
但我建议改变你的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace reach_test {
public class Class1 {
public string myText;
public Class1() {
myText = "Windows Header";
}
public string someMethod() {
return myText;
}
}
}
然后设置Form1.Text
:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace reach_test {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
Class1 formName = new Class1(); // this line compiles OK.
this.text= formName.someMethod(); // this line compiles OK.
}
}
}