namespace Bus
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
string selectedItem=listBox1.SelectedItem.ToString();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
groupBox1.Text=selectedItem;
}
}
}
当我运行它时,我在private void中的selectedItem收到错误,说当前上下文中不存在selectedItem。
为什么?如果我在公共Form2()中声明字符串,那么其他人是否可以使用它,因为它是公开的?
答案 0 :(得分:2)
selectedItem
只是Form2
构造函数的本地字符串。您需要将其创建为Form2
类的所有组件的字段或属性才能访问它。
答案 1 :(得分:2)
将selectedItem
定义为属性或字段:
namespace Bus
{
public partial class Form2 : Form
{
public string selectedItem {get; private set}
//private string selectedItem;
public Form2()
{
InitializeComponent();
selectedItem=listBox1.SelectedItem.ToString();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
groupBox1.Text=selectedItem;
}
}
}
答案 2 :(得分:1)
好吧,selectedItem
是本地变量,只能在构造函数范围内使用本地。将其转换为属性:
namespace Bus
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public String SelectedItem {
get {
if (null == listBox1.SelectedItem)
return "";
return listBox1.SelectedItem.ToString()
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
groupBox1.Text = SelectedItem;
}
}
}
答案 3 :(得分:1)
您需要将其设为班级字段
namespace Bus
{
public partial class Form2 : Form
{
private string selectedItem;
public Form2()
{
InitializeComponent();
selectedItem=listBox1.SelectedItem.ToString();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
groupBox1.Text=selectedItem;
}
}
}
答案 4 :(得分:1)
您需要在此处考虑许多事项
首先,在方法内创建的任何变量都只能在该方法中使用 因此,您需要将其从局部变量升级为类变量
其次如何升级它可以通过多种方式完成
字段:这通常用于只在课堂内不需要的东西(虽然它们可以公开,但这不是最佳实践) 例如
public partial class Form2 : Form
{
private string selectedItem;
属性:当需要在类外部使用字段时,或者当您需要对获取或设置数据时发生的情况进行额外控制时,使用属性 例如
public partial class Form2 : Form
{
public string SelectedItem{get;set;}
静态:这是当你需要从类的每个实例访问变量而不仅仅是它所设置的变量时,static可以是字段或属性 例如
public partial class Form2 : Form
{
public static string SelectedItem{get;set;}
你需要的取决于你需要完成的事情
也只是因为一个类是公开的并不意味着它上面的一切都是公开的,
你可能有一些只在课堂内有用的东西(私人)
仅限于班级或其后代(受保护)
仅在项目内部(内部)
或所有人都可以访问(公共)
因此您必须单独设置每个方法或属性的访问权限(如果您不将其默认设置为内部),则属性允许您分别为get和set设置此属性,以便您可以拥有属性什么都可以读取,但只有类本身可以改变