如何将我的类变量属性导入Winform控件?

时间:2016-10-10 02:19:28

标签: c# winforms

目前我有多个班级,其中一个名为'变班班'我在哪里     {get;set;}
 我从其他班级获得的价值观。在空白中访问这些值只是:

Private void (Variables vb) 
{    
}

然而,在“负载”中Winforms的一部分,

private void Form1_Load(object sender, EventArgs e)
    {
    }

来自变量类:

public class Variables
{
public int Node { get; set; }
} 

object sender, EventArgs e部分占据了我放置参数的空间。有什么方法可以从winform上的班级Node获得Variables吗?

3 个答案:

答案 0 :(得分:2)

您的方法Form1_Load事件处理程序(因为它通常会因某些事件发生而被调用)。 "加载"事件由WinForms定义,因此您无法更改参数为object senderEventArgs e的事实。

WinForms在显示表单之前创建Form1类的一个实例。每当表单上发生事件时,都会调用同一对象上的事件处理程序。

因此,您可以将值存储在Form1类的字段和属性中:

public class Form1 : Form
{
    Variables _myVariables;

    public Form1()
    {
        InitializeComponent();
        _myVariables = new Variables() { Node = 10 }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        MessageBox.Show("The current value of _myVariables.Node is: " + _myVariables.Node);
    }
}

如果您的表单外部创建了Variables对象,则可以将其传递到Form1构造函数中:

public class Form1 : Form
{
    Variables _myVariables;

    public Form1(Variables variables)
    {
        InitializeComponent();
        _myVariables = variables;
    }

    // ...
}


// Then, somewhere else:

var variables = new Variables() { Node = 10 };
var myForm = new Form1(variables);
myForm.Show();
// or: Application.Run(myForm);

答案 1 :(得分:0)

我不能100%确定这是否是你要找的,但我想我可以提供帮助。

    namespace Example
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            //class which can be used anywhere in the namespace
            public class exampleClass
            {
                public const string SETSTATE = "0";
                public const string GETSTATE = "1";
                public const string SETVALUE = "2";
                public const string GETVALUE = "3";
                public const string SENDFILE = "4";
                public const string STATE_RP = "129";
                public const string VALUE_RP = "131";
                public const string STATUS_RP = "128";
            }
        }
   }

您可以在Form1中的任何位置使用exampleClass及其任何封闭的成员。您无需在表单中的任何位置传递它以使用它。您可以稍后添加一个直接使用它的函数,如:

void exampleF()
        {
           //note that when you are accessing properties of UI elements from
           //a non-UI thread, you must use a background worker or delegate
           //to ensure you are doing so in a threadsafe way. thats a different problem though.
           this.txtYourTextBox.txt = exampleClass.GETSTATE;
        }

答案 2 :(得分:0)

也许你的尝试实际上是在WinForms中使用MVP-Pattern。非常好的主意。 然后,您可以使用DataBinding将Forms-Controls绑定到“Variables类”属性。您的变量类采用演示者角色,您的表单是视图,您的模型是变量类数据的来源。

不幸的是,该模式使用了一些必须处理的高级机制。

有关详细信息,请参阅此处: Databinding in MVP winforms