[英]Cannot access array of buttons within the same class
所以,我有一个带有 9 个按钮的 ASPX 文件(在井字游戏上工作,所以每个按钮都有相同的 OnClick 方法),在 C# 上,我找到所有这些按钮并将其存储在一个数组中,如下所示:
public partial class Index : System.Web.UI.Page {
protected static Button[] buttons;
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
initialConditions();
}
}
private void initialConditions() {
buttons = findButtons();
// Can access and modify buttons here
foreach (var btn in buttons) {
btn.Text = "this does work";
}
// Cant modify buttons here
accessButtons();
}
private Button[] findButtons() {
List<Button> tmpButtons = new List<Button>();
foreach (var item in board.Controls) {
if (item is Button) {
tmpButtons.Add((Button)item);
}
}
return tmpButtons.ToArray();
}
private void accessButtons() {
foreach (var button in buttons) {
button.Text = "this wont work";
}
}
}
在initialCondition()
方法中初始化数组后,我可以修改按钮,但accessButtons()
方法无法访问那些完全相同的按钮。 我想这与参考和实例有关,但我无法理解这一点。 如何使用 for 循环等轻松访问和修改 class 内任何位置的按钮阵列?
编辑:我尝试初始化数组,如protected static Button[] buttons = findButtons();
但是当我这样做时,我必须使accessbuttons()
成为 static 方法,但它无法访问 ASPX 上的board
元素,所以我无法弄清楚那个。
改变这个:
protected static Button[] buttons;
对此:
protected List<Button> buttons;
和这个:
private Button[] findButtons() {
List<Button> tmpButtons = new List<Button>();
foreach (var item in board.Controls) {
if (item is Button) {
tmpButtons.Add((Button)item);
}
}
return tmpButtons.ToArray();
}
对此:
private List<Button> findButtons() {
return board.Controls.OfType<Button>().ToList();
}
最后是这个:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
initialConditions();
}
}
对此:
protected void Page_PreInit(object sender, EventArgs e) {
initialConditions();
}
请注意,这些更改中的每一项都会导致比以前更少的代码。
对于最后的更改,请记住每个服务器事件(包括按钮单击)都是 web 服务器和浏览器之间的完整往返,具有完全不同的页面实例 class。 您必须在页面生命周期的每次运行时重建该数组,如果您希望 ViewState 工作,您需要在Page_Load()
之前完成。
如果你改变这个怎么办:
private void accessButtons() {
foreach (var button in buttons) {
button.Text = "this wont work";
}
}
对此:
private void accessButtons() {
foreach (var button in findButtons()) {
button.Text = "this wont work";
}
}
因为这;
protected static Button[] buttons;
protected static
所以你只能这样访问它;
var buttons = Index.buttons;
但它将是 null 或空的,因为它没有在任何地方填充。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.