我有一个主要表单,我在其中分配一些变量并将它们传递给myclass.cs。我需要在myclass.cs中使用类变量,因为我需要在该类的几个地方使用这些变量。
我可以在myclass.cs的CustomerParams方法中正确地看到变量,所以我知道他们已经到了那里。但是,如果我在InitializeComponent()之后调用它们,它们总是返回null; of myclass.cs。如果我在另一个事件处理程序中调用它们,例如在myclass.cs中单击一个按钮,那么它们总是返回指定的第一个变量,并且当我从mainform中的列表框中选择不同的变量时,它们永远不会更新(甚至认为他的CustomerParams方法继续更新为预期)。我做错了什么?
mainform.cs
private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox != null)
{
string customerName = (listBox.SelectedItem.ToString());
MyClass mc = new MyClass();
contentPanel.Controls.Add(mc);
mc.CustomerParams(customerName, customerId);
}
}
myclass.cs
public partial class MyClass : UserControl
{
private int _customerId { get; set; }
private string _customerName {get; set;}
public MyClass()
{
InitializeComponent();
// Shows null values!
Console.WriteLine("Values: " + _customerName + "(" + _customerId + ")");
}
public void CustomerParams(string customerName, int customerId)
{
_customerName = customerName;
_customerId = customerId;
// Shows correct values!
Console.WriteLine("Values-Method: " + _customerName + "(" + _customerId + ")");
}
private void testButton_Click(object sender, EventArgs e)
{
// Only shows the initial value even when the SelectedIndex in mainform.cs changes
Console.WriteLine("Values-Button: " + _customerName + "(" + _customerId + ")");
}
}
答案 0 :(得分:2)
在InitializeComponent()之后,您将获得null,因为没有为变量分配任何内容。它们在CustomerParams中具有值,因为您将它们设置为通过该方法的参数。您为这些变量分配值的唯一位置是CustomerParams方法,因此它们永远不会更改该方法之外的值。
答案 1 :(得分:0)
修正了问题。我最后做的是在我的主要表单中我创建了一个静态方法,我在其中分配变量,然后为我的按钮单击以及myclass中的静态方法调用,然后我将其分配给变量。
答案 2 :(得分:0)
我刚刚学习c#(来自C ++),我遇到了同样的问题。解决方案是声明类变量STATIC。我想因为类从未实例化,所以变量必须是静态的。在这里解释:
https://msdn.microsoft.com/en-us/library/79b3xss3.aspx#Anchor_0