在Windows Phone 8中创建带有n个文本框的1D数组

本文关键字:文本 数组 1D Phone Windows 创建 | 更新日期: 2023-09-27 17:54:12

我想在Windows Phone 8中创建一个包含n个文本框的1D数组(我在Windows Form中已经成功了)1)在MainPage.xaml:

 <TextBox x:Name="tbx_a" HorizontalAlignment="Left" Height="40" Margin="29,265,0,0" TextWrapping="Wrap" Text="a:" VerticalAlignment="Top" Width="40" FontFamily="Arial"/>
        <Button x:Name="btn_Random" Content="Random" HorizontalAlignment="Left" Margin="147,385,0,0" VerticalAlignment="Top" Height="65" FontFamily="Microsoft YaHei" FontSize="20" Click="btn_Random_Click"/>
        <Button x:Name="btn_Array" Content="Create" HorizontalAlignment="Left" Margin="284,385,0,0" VerticalAlignment="Top" Height="65" Width="130" FontFamily="Microsoft YaHei" FontSize="20" Click="btn_Array_Click"/>

2) In MainPage.xaml.cs:

public partial class MainPage : PhoneApplicationPage 
{
    public MainPage()
    {
        InitializeComponent();      
    }
    TextBox[] Node;
    int[] a;
    int n ; // Number of boxes User wanna see in screen
    **Label[] label_box; //Label of box: 15,23, 82, etc...:First problem here : DON'T HAVE LABEL NAMESPACE**
    public void create_array ()
    {
    label_box = new Label[n];  // From problem above
    a = new int[n];
    Node = new TextBox[n];
    tbx_a.Width = 20;
    tbx_a.Height = 20;
    tbx_a.FontSize = 18  ;
        for (int i=0; i< n ; i++)
        {
            //NODE
            a[i] = i;
            Node[i] = new TextBox();
            Node[i].Text = a[i].ToString();
            Node[i].Width = 20;
            Node[i].Height = 20;
            Node[i].Foreground = new SolidColorBrush(Colors.White);
            Node[i].Background = new SolidColorBrush(Colors.Red);
            ***this.Controls.Add (Node[i]);  // Second problem : DON'T HAVE CONTROLS NAMESPACE***
            label_box[i] = new Label();
            label_box[i].Text = a[i].ToString();
            label_box[i].Width = 20;
            label_box[i].Height = 20;
            ***this.Controls.Add(label_box[i]);  // Second problem above***
        }
    }
    private void btn_Random_Click(object sender, RoutedEventArgs e)
    {
        Random r = new Random();
        for (int i = 0; i < n; i++)
        {
            a[i] = r.Next(100);
            Node[i].Text = a[i].ToString();
        }
    }
    private void btn_Array_Click(object sender, RoutedEventArgs e)
    {
        create_array();
    }       
}

3)我想在我的手机屏幕上看到结果后,我输入n = 8,并选择随机按钮:

[23][01][57][92][71][08][38][49]

有人能帮我吗?

在Windows Phone 8中创建带有n个文本框的1D数组

如果你想创建一些你几乎已经完成任务的文本框,你会犯几个小错误:

  • 首先,你应该提供一个方法,将你的TextBox a:转换为数字n -否则你总是创建0文本框。在这种情况下,您还应该从TextBoxText中删除a:,因为它将更容易转换。
  • 在你的创建方法中,你需要一个控件在你的页面中,你将添加你的文本框-我将使用StackPanel为例
  • 作为你的标签,你可以使用TextBlock
在XAML文件中,它看起来像这样:
<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="2*"/>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="10">
        <TextBlock Text="a:" VerticalAlignment="Center"/>
        <TextBox x:Name="tbx_a" VerticalAlignment="Center" Height="80" TextWrapping="NoWrap" Text="8" TextAlignment="Center" Width="100" FontFamily="Arial" />
        <Button x:Name="btn_Random" Content="Random" HorizontalAlignment="Left"  VerticalAlignment="Center" Height="65" FontFamily="Microsoft YaHei" FontSize="20" Click="btn_Random_Click"/>
        <Button x:Name="btn_Array" Content="Create" HorizontalAlignment="Left"  VerticalAlignment="Center" Height="65" Width="130" FontFamily="Microsoft YaHei" FontSize="20" Click="btn_Array_Click"/>
    </StackPanel>
    <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Auto">
        <StackPanel Orientation="Vertical">
            <StackPanel Name="BoxStack" Orientation="Horizontal" Margin="20"/>
        </StackPanel>
    </ScrollViewer>
</Grid>

正如你所看到的,我在这里使用了StackPanel和名称BoxStack -我将添加我的文本框。我也把它放在ScrollViewer里面,这样当有很多文本框的时候,我就可以滚动了。

然后代码:

    public MainPage()
    {
        InitializeComponent();
        tbx_a.TextChanged += (s, e) => { n = Convert.ToInt32(tbx_a.Text); };
    }
    TextBox[] Node;
    int[] a;
    int n = 8; // Number of boxes User wanna see in screen
    public void create_array()
    {
        a = new int[n];
        Node = new TextBox[n];
        for (int i = 0; i < n; i++)
        {
            //NODE
            a[i] = i;
            Node[i] = new TextBox();
            Node[i].Text = a[i].ToString();
            Node[i].Width = 80;
            Node[i].Height = 80;
            Node[i].Margin = new Thickness(2);
            Node[i].Foreground = new SolidColorBrush(Colors.White);
            Node[i].Background = new SolidColorBrush(Colors.Red);
            BoxStack.Children.Add(Node[i]);
        }
    }
    private void btn_Random_Click(object sender, RoutedEventArgs e)
    {
        Random r = new Random();
        for (int i = 0; i < n; i++)
        {
            a[i] = r.Next(100);
            Node[i].Text = a[i].ToString();
        }
    }
    private void btn_Array_Click(object sender, RoutedEventArgs e)
    {
        create_array();
    }

正如你在这里看到的,我已经订阅了一个方法到TextBox.TextChanged事件,这将改变我的号码n当用户填写框。其他的事情(我希望)你们应该很清楚了。您的代码中仍然有一些混乱(我没有故意更改它-以便您更容易理解)。

我也删除了标签-希望你能自己做。祝你编码愉快。