我有一段时间让这个工作起来,我觉得它很简单...
我有2个类,form1.cs和logic.cs
在form1上,我有一个私有变量"输出",带有公共属性输出,我可以设置值。我还有一个公共方法来设置textbox1.Text的内容(保持textbox1私有)。
namespace myNamespace
{
public partial class Form1 : Form
{
private string output;
public string Output
{
get { return output; }
set
{
if (!String.IsNullOrEmpty(value))
output += value;
}
}
public void SetTextbox1(string value)
{
textbox1.Text = value;
}
}
}
在逻辑上,我有一些实例,我试图更改form1上的变量来更新textbox1
namespace myNamespace
{
class logic
{
public void Info(string imagePath, string mountDir)
{
mountDir = "C:\\mount"
try
{
DismImageInfoCollection imageInfo = DismApi.GetImageInfo(mountDir)
form1.Output = imageInfo.ToString();
form1.SetTxtOutput(form1.Output);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
我在最后两行尝试中收到错误消息:
An object reference is required for the non-static field, method, or property 'form1.Output'
如果我将Output,SetTxtOutput()和输出更改为静态,则会抱怨,因为textbox1也不是静态的。
在没有将文本框设置为公开并直接操作文本框的情况下,跨类操作文本框文本值的正确方法是什么?
答案 0 :(得分:0)
您需要将form1对象实际传递给逻辑类I.e。
//default constructor
Logic(form1 Form)
{
Form.output;
}
您收到错误的原因是因为winforms为每个表单创建一个新类,并且在不实例化的情况下访问类的元素,这些元素需要具有static关键字。
如果您只是创建一个form1(form1 form = new form1()
)的新实例,请注意这将创建一个新的表单实例,而不是显示的表单。