跨类操作表单文本

时间:2015-10-12 21:37:21

标签: c# winforms class

我有一段时间让这个工作起来,我觉得它很简单...

我有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也不是静态的。

在没有将文本框设置为公开并直接操作文本框的情况下,跨类操作文本框文本值的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您需要将form1对象实际传递给逻辑类I.e。

 //default constructor
 Logic(form1 Form)
 {
     Form.output;
 }

您收到错误的原因是因为winforms为每个表单创建一个新类,并且在不实例化的情况下访问类的元素,这些元素需要具有static关键字。

如果您只是创建一个form1(form1 form = new form1())的新实例,请注意这将创建一个新的表单实例,而不是显示的表单。

相关问题