You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# Windows Forms中获取用户坐标输入并存入栈

解决WinForms中替换Console输入输出实现坐标入栈的问题

首先明确:Windows Forms是图形界面应用,Console.WriteLine和Console.ReadLine是控制台程序的交互方法,在标准WinForms项目里不会生效——因为没有控制台窗口供用户输入或查看输出。下面给你一套可行的实现方案:

实现步骤

1. 设计界面

在WinForms窗体上添加以下控件:

  • 两个Label控件,Text分别设为「行号:」「列号:」
  • 两个TextBox控件,Name分别设为txtRow、txtColumn(用来输入行和列的数值)
  • 一个Button控件,Name设为btnAddCoordinate,Text设为「添加坐标」
  • 可选:一个ListBox控件,Name设为lbCoordinates(用来显示已输入的坐标,方便查看)

2. 后台代码实现

我们用泛型Stack<Tuple<int, int>>来存储坐标(泛型栈类型更安全,避免非泛型栈的装箱拆箱问题),然后在按钮点击事件里处理输入逻辑,同时限制最多输入10次:

// 定义全局栈对象
private Stack<Tuple<int, int>> _coordinateStack = new Stack<Tuple<int, int>>();
// 记录已输入次数
private int _inputCount = 0;

private void btnAddCoordinate_Click(object sender, EventArgs e)
{
    // 检查是否已输入10次
    if (_inputCount >= 10)
    {
        MessageBox.Show("已完成10次坐标输入!");
        btnAddCoordinate.Enabled = false;
        return;
    }

    // 验证并转换行号输入
    if (!int.TryParse(txtRow.Text, out int row))
    {
        MessageBox.Show("请输入有效的整数行号!");
        txtRow.Focus();
        return;
    }

    // 验证并转换列号输入
    if (!int.TryParse(txtColumn.Text, out int column))
    {
        MessageBox.Show("请输入有效的整数列号!");
        txtColumn.Focus();
        return;
    }

    // 将坐标存入栈
    _coordinateStack.Push(Tuple.Create(row, column));
    _inputCount++;

    // 可选:在ListBox中显示已输入的坐标
    lbCoordinates.Items.Add($"第{_inputCount}次输入:行{row},列{column}");

    // 清空输入框,方便下次输入
    txtRow.Clear();
    txtColumn.Clear();
    txtRow.Focus();
}

3. 原代码错误修正说明

  • 循环语法错误:C#中循环是小写的for,要实现10次输入,条件应为for (int x = 0; x < 10; x++)
  • Stack.Push只能接收一个参数,必须把行和列包装成单个对象(比如Tuple或自定义类)
  • Console.ReadLine返回字符串,需要转换为整数才能赋值给int变量,原代码直接赋值会报错

内容的提问来源于stack exchange,提问作者Abdi L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:01:22