如何在C#中的方法之间传递变量?
我试图构建一个程序,但我意识到我无法访问某个变量,因为它是用另一种方法创建的 如何将变量转移到另一个方法 这是我试图做的一个例子:如何在C#中的方法之间传递变量?,c#,winforms,instance-variables,C#,Winforms,Instance Variables,我试图构建一个程序,但我意识到我无法访问某个变量,因为它是用另一种方法创建的 如何将变量转移到另一个方法 这是我试图做的一个例子: namespace Example { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object
namespace Example
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string text = textBox1.Text;
}
private void label1_Click(object sender, EventArgs e)
{
// Get the "text" variable and use it
label1.Text = text;
}
}
}
你就快到了。在面向对象编程中,为了共享状态,在类中有私有变量是一种常见的做法。在类中添加一个变量。它将在所有方法中可用,并可用于在它们之间共享数据(这是许多方法中的一种): 您的示例有一个名为
Form1
的表单,其中有一个名为button1
的按钮,一个名为textbox1
的文本框和一个名为label1
的标签
您正在尝试的场景是:
textbox1
按钮1
,这将保存文本框1
标签1
,这将显示上一步中存储的值Form1
类上创建一个实例变量(有时称为成员变量),这将可供Form1
类的同一实例上的其他方法访问
有关实际解释,请参阅
在需要更改实现之前,您只需使用
button1
的click事件处理程序中,我们可以在Form1
实例上设置StoredText
属性的值
private void button1_Click(object sender, EventArgs e)
{
this.StoredText = textBox1.Text;
}
在c语言中,set是一个用于将值保存到属性中的术语#
注意this
关键字的使用,在这种情况下它是可选的,或者可以由编译器推断,它表示我们希望引用类实例上的一个成员,而不是在正在执行的代码行的相同方法范围内具有相同名称的变量
label1
的click事件处理程序中,我们可以获得先前存储在Form1
实例的StoredText
属性中的值
private void label1_Click(object sender, EventArgs e)
{
// Get the "StoredText" variable and use it
label1.Text = this.StoredText;
}
get是一个术语,我们使用它从c中的属性访问值#
此
不是必需的,但有助于理解我们正在访问当前方法范围之外的成员
namespace Example
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>Saved value from see <see href="textBox1"/></summary>
public string StoredText { get; set; }
private void button1_Click(object sender, EventArgs e)
{
this.StoredText = textBox1.Text;
}
private void label1_Click(object sender, EventArgs e)
{
// Get the "StoredText" variable and use it
label1.Text = this.StoredText;
}
}
}
可以在方法之间直接传递变量,而无需中间存储,这是另一天的课程,将涉及方法上的
return
语句和/或parameters
。
但是,在这种情况下,这些方法上的
返回
或其他参数都不能使用,因为这些是需要特定方法签名才能按预期操作的事件处理程序。通常,您会从方法返回一些内容。或者,该方法可能会为其类的属性指定一个值,然后您可以访问该属性。这完全取决于上下文。如果您想要一个更明确的答案,请展示您现有的代码,并准确地解释您要做的事情。您可以阅读有关带有参数和返回值的方法的内容。感谢您花时间分享您的问题。你的要求不清楚/缺少什么。你的目标和困难是什么?到目前为止你做了什么?请尝试更好地解释您的问题、开发环境、数据类型和预期结果,以及或多或少地共享代码(无屏幕截图)、示例、屏幕图像或草图、用户故事或场景图。为了帮助您改进您的请求,请阅读&。这是一个直接的回答,但也许应该说些什么?这在Windows窗体世界中并不常见,但也许应该如此(尤其是对于大型项目)。感谢@PeterMortensen,我希望在现阶段通过引导OP在字段上使用属性就足够了,但作为MVVM的有力倡导者,即使在窗体中,我也应该在这个问题上更有力一点。我担心我的个人偏见会妨碍我在没有压倒性的行动的情况下提供切实可行的建议。
private void label1_Click(object sender, EventArgs e)
{
// Get the "StoredText" variable and use it
label1.Text = this.StoredText;
}
namespace Example
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>Saved value from see <see href="textBox1"/></summary>
public string StoredText { get; set; }
private void button1_Click(object sender, EventArgs e)
{
this.StoredText = textBox1.Text;
}
private void label1_Click(object sender, EventArgs e)
{
// Get the "StoredText" variable and use it
label1.Text = this.StoredText;
}
}
}
label1.Text = textBox1.Text;