c# - 无法访问同一类中的按钮数组
问题描述
所以,我有一个带有 9 个按钮的 ASPX 文件(在 TicTacToe 游戏上工作,所以每个按钮都有相同的 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 循环等轻松访问和修改类中任何位置的按钮数组?
编辑:我尝试像初始化数组一样protected static Button[] buttons = findButtons();
,但是当我这样做时,我必须创建accessbuttons()
一个静态方法,但是它无法访问board
ASPX 上的元素,所以我无法弄清楚那个。
解决方案
改变这个:
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 服务器和浏览器之间的完整往返,具有完全不同的页面类实例。您必须在页面生命周期中的每次运行时重建该数组,如果您希望 ViewState 工作,您需要在 Page_Load()
.
推荐阅读
- servlets - EL Property Not found 异常,getter 方法正确
- php - 如何按文件大小的字符串对数组进行排序?
- processing - 处理:分层形状时 Alpha 停止增加
- typescript - 如何将 Typescript 添加到 Nativescript-Vue 项目中?
- android - 收缩波纹效果
- javascript - removeTodo 操作未从状态中删除
- c++ - 用 OpenCV 检测两个圆圈
- firebase-realtime-database - 如何在firebase数据库列表中添加每个元素的值?
- debugging - 无法将 DirectX Pix 附加到 Firefox
- java - 使用访问器从对象中打印出一个整数?