如何在button_click方法中使用TextBox数组生成对应行列的int数组?
我注意到你当前的代码里,textBox1和textBox2是构造函数内的局部变量,这意味着button1_Click方法根本访问不到它们——这是第一个要解决的问题。我们需要把这两个TextBox数组提升为类的成员变量,这样整个类的方法都能访问到。
接下来,在点击事件里,我们需要遍历每个TextBox的内容,把它转换成int类型,同时要处理用户可能输入非数字的情况(避免程序崩溃)。
下面是修改后的完整代码:
public partial class EnterColsAndRows : Form { // 把TextBox数组提升为类成员变量,让button_Click能访问 private TextBox[] _columnTextBoxes; private TextBox[] _rowTextBoxes; public int width_of_nonogram; public int height_of_nonogram; public EnterColsAndRows(int width, int height) { InitializeComponent(); width_of_nonogram = width; height_of_nonogram = height; // 初始化列的TextBox数组 _columnTextBoxes = new TextBox[width_of_nonogram]; for (int i = 0; i < width_of_nonogram; i++) { _columnTextBoxes[i] = new TextBox(); _columnTextBoxes[i].Text = "Col " + (i + 1); Point p = new Point(20, 30 * i); _columnTextBoxes[i].Location = p; this.Controls.Add(_columnTextBoxes[i]); } // 初始化行的TextBox数组 _rowTextBoxes = new TextBox[height_of_nonogram]; for (int i = 0; i < height_of_nonogram; i++) { _rowTextBoxes[i] = new TextBox(); _rowTextBoxes[i].Text = "Row " + (i + 1); Point p = new Point(200, 30 * i); _rowTextBoxes[i].Location = p; this.Controls.Add(_rowTextBoxes[i]); } } private void button1_Click(object sender, EventArgs e) { // 生成列的int数组 int[] columnValues = new int[width_of_nonogram]; bool hasInvalidInput = false; for (int i = 0; i < _columnTextBoxes.Length; i++) { // 使用TryParse避免输入非数字时抛出异常 if (int.TryParse(_columnTextBoxes[i].Text, out int value)) { columnValues[i] = value; } else { // 处理无效输入,比如提示用户 MessageBox.Show($"第{i+1}列的输入不是有效的整数!"); hasInvalidInput = true; break; } } if (hasInvalidInput) return; // 生成行的int数组 int[] rowValues = new int[height_of_nonogram]; for (int i = 0; i < _rowTextBoxes.Length; i++) { if (int.TryParse(_rowTextBoxes[i].Text, out int value)) { rowValues[i] = value; } else { MessageBox.Show($"第{i+1}行的输入不是有效的整数!"); hasInvalidInput = true; break; } } if (!hasInvalidInput) { // 这里可以使用生成好的columnValues和rowValues数组做后续操作 MessageBox.Show("行列数组生成成功!"); } } }
关键说明:
- 成员变量改造:把原来构造函数内的局部
textBox1、textBox2改成类级别的_columnTextBoxes和_rowTextBoxes,这样点击事件方法就能访问到这些TextBox实例了。 - 输入验证:使用
int.TryParse而不是直接int.Parse,这样当用户输入非数字内容时,不会抛出异常,而是友好提示错误。 - 数组生成逻辑:遍历每个TextBox,将有效输入存入对应的int数组,验证通过后就可以使用这两个数组进行后续的数独(Nonogram)逻辑处理了。
内容的提问来源于stack exchange,提问作者y47999
相关产品推荐
相关产品推荐

