以C#,WPF格式显示2到12的乘法表

时间:2016-09-23 08:01:35

标签: c# wpf

我需要编写一个程序,询问用户2到12之间的数字,然后显示一个乘法表,其中的答案格式如下:

用户输入:6 输出:

     2    3    4    5    6 

2    4    6    8    10   12

3    6    9    12   15   18

4    8    12   16   20   24

5    10   15   20   25   30

6    12   18   24   30   36

我无法得到,在WPF应用程序屏幕上显示的顶部水平行(2,3,4,5,6)和左列(2,3,4,5,6),我也需要使垂直标签正确,因此所有数字在水平和垂直方向上均匀分布。我目前的代码如下:

    int inputNumber;

    public MainWindow()
    {
        InitializeComponent();
        btnYes.IsEnabled = false;
    }

    private void calculateTable_Click(object sender, RoutedEventArgs e)
    {
        inputNumber = int.Parse(number.Text);
        if (inputNumber < 2 || inputNumber > 12)
        {
            MessageBox.Show("Please enter values between 2 and 12");
            number.Clear();
            return;
        }
        for (int i = 2; i <= inputNumber; i++)
        {
            for (int j = 2; j <= inputNumber; j++)
            {
                displayValues.Text += (i * j).ToString() + '\t';
            }
            displayValues.Text += '\n';
        }
        calculateTable.IsEnabled = false;
        btnYes.IsEnabled = true;
    }

    private void btnYes_Click(object sender, RoutedEventArgs e)
    {
        number.Clear();
        number.Focus();
        displayValues.Text = String.Empty;
        btnYes.IsEnabled = false;
        calculateTable.IsEnabled = true;
    }

    private void btnNo_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }

3 个答案:

答案 0 :(得分:0)

您的一个问题是您忘记打印ì -loop迭代的第一个数字。对于换行,您还可以使用Environment.NewLine 我在这里使用TextBox进行显示。

试试这个:

int inputNumber = 6;

for (int i = 2; i <= inputNumber; i++)
{
    textBox.Text += i.ToString() + '\t';


    for (int j = 2; j <= inputNumber; j++)
    {
        textBox.Text += (i * j).ToString() + '\t';
    }
    textBox.Text += Environment.NewLine;
}

结果如下:

enter image description here

对于这样的inputNumber = 12

enter image description here

希望这会有所帮助。

修改

编辑完成后我明白你了解一点。

要获取第一行,您只需要将{2}中的枚举包含在前导空格inputNumber的{​​{1}}中。对于垂直对齐,你可以做一点作弊并取3 " " s,这将与标签在空间上相同。

这是一个示例代码:

NewLine

结果现在看起来像这样:

enter image description here

答案 1 :(得分:0)

最简单有意义的方法:

使用UniformGrid作为<UniformGrid x:Name="UG" Columns="10"/>,代码:

    int from = 2, to = 15;
    for (int i = from; i <= to; ++i)
    {
        for (int j = 1; j <= 10; ++j)
        {
            TextBlock tb = new TextBlock() { Text = (i * j).ToString() };
            UG.Children.Add(tb);
        }
    }    

还有其他方法:

  1. 为每个表创建一个StackPanel Orientation = Horizontal。每个数字都使用TextBlock

  2. 创建一个包含10列的Grid。您的列是固定的,但行数会有所不同。因此,您可以创建所需的行,并显示相关列中的每个数字。使用RowDefinitionGrid.SetRow()Grid.SetColumn()

  3. 使用DataGrid并将其设为ReadOnly。创建列表,并将其简单地指定为DataGrid.ItemsSource。您可以格式化DataGrid以隐藏各种行等。

答案 2 :(得分:0)

我需要从我的程序中获得的答案应采用以下格式: Multiplication Tables from 2 to 12

我得到最左边的列(2到8)和结果,但不是顶行(2到8)和数字之间的垂直间距。所有数字必须在网格中均匀分布/分布。