在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]
有人能帮我吗?
如果你想创建一些你几乎已经完成任务的文本框,你会犯几个小错误:
- 首先,你应该提供一个方法,将你的
TextBox a:
转换为数字n
-否则你总是创建0文本框。在这种情况下,您还应该从TextBox
的Text
中删除a:
,因为它将更容易转换。 - 在你的创建方法中,你需要一个控件在你的页面中,你将添加你的文本框-我将使用
StackPanel
为例 - 作为你的标签,你可以使用
TextBlock
<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
当用户填写框。其他的事情(我希望)你们应该很清楚了。您的代码中仍然有一些混乱(我没有故意更改它-以便您更容易理解)。
我也删除了标签-希望你能自己做。祝你编码愉快。