2012-04-07 3 views
0

動的テキストボックスを生成しようとしています 2つのテキストボックスから開始します。テキストボックスを動的に生成して合計に一致させます

値が動的に別のテキストボックスを生成し、ユーザが複数の値を入力してみましょう最初のテキストボックスの値未満である場合。
これは、生成された2番目のものから最後のものまでのすべてのテキストボックスの値の合計が最初のテキストボックスの値と等しくなるまで行わなければなりません。もちろん

他のもの等にもlablesのようなテキストボックスで生成されたので、私は、グリッドを使用して考えると、動的にグリッドを生成するが、その上に、私は迷ってしまいました正しく配置する必要があります。

ヘルプ

おかげ


私は動的にした今、私が考えていたものを、次のコード

<ScrollViewer Margin="8,8,8,14.417" Grid.Row="4" Grid.ColumnSpan="5" VerticalScrollBarVisibility="Hidden"> 
    <Grid Margin="8" Grid.Row="4" Grid.ColumnSpan="4" x:Name="amtGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" MinWidth="103"/> 
      <ColumnDefinition Width="Auto" MinWidth="324"/> 
      <ColumnDefinition Width="Auto" MinWidth="218"/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <ComboBox x:Name="crdrnextrows" Margin="32.367,8,8,7.423" SelectedIndex="1" /> 
     <ComboBox Background="#FFC6C3C6" Margin="8" x:Name="comboboxCr" GotKeyboardFocus="comboboxCr_GotKeyboardFocus" Grid.Column="1"/> 
     <TextBox Background="#FFC6C3C6" Foreground="White" IsEnabled="True" Margin="7.973,8,8,8" x:Name="txtBoxam1" Grid.Column="2" LostFocus="txtBoxam1_LostFocus"/> 
     <TextBox Background="#FFC6C3C6" Foreground="White" IsEnabled="True" Margin="8,8,33.972,8" x:Name="txtBoxamt2" Grid.Column="3" LostFocus="textBox4_LostFocus"/> 
    </Grid> 
</ScrollViewer> 

類似したコードではなく、スクロールビューアのないその上で、別のテキストボックスがあるとScrollViewerのを使用しましたスクロールビューアに表示されているグリッドのインスタンスを必要に応じて均等にする必要があります。

同じグリッドの新しいインスタンスを作成し、コードで動的にscollviewerに追加できますか?

おかげ

+0

あなたは「最初の値よりも小さい値」を特定する必要があります。 – Paparazzi

+0

私はそれを意味します。最初のテキストボックスに10000を入力し、2番目のテキストボックスに5000を入力すると、残りの5000を入力する別のテキストボックスが生成され、新しいテキストボックスに入力された値が以前の値に追加されても、別のテキストボックスを生成する必要があります。これは、すべてのテキストボックスの追加された値が10000に等しくなるまで続きます。 – Shaumux

答えて

1

あなたが与えた追加の情報を見ると、あなたが作成したいされているオブジェクトの複雑さを与え、UserControlはおそらくベストフィットだろう。このコードはDoubleClickを使用して、ScrollViewerにUserControlを追加する方法を示す例です。テキストボックスから情報を取得するには、UserControlのプロパティを公開する必要があります。それ以外の場合、コードは私の以前の回答と同じようにする必要があります。

すなわち:

ユーザーコントロールのXAML

<UserControl x:Class="WpfApplication1.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="70" d:DesignWidth="985"> 
    <Grid Margin="8" Grid.Row="4" Grid.ColumnSpan="4" x:Name="amtGrid" Height="40"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" MinWidth="103"/> 
      <ColumnDefinition Width="Auto" MinWidth="324"/> 
      <ColumnDefinition Width="Auto" MinWidth="218"/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <ComboBox x:Name="crdrnextrows" Margin="32.367,8,8,7.423" SelectedIndex="1" /> 
     <ComboBox Background="#FFC6C3C6" Margin="8" x:Name="comboboxCr" GotKeyboardFocus="comboboxCr_GotKeyboardFocus" Grid.Column="1"/> 
     <TextBox Background="#FFC6C3C6" Foreground="White" IsEnabled="True" Margin="7.973,8,8,8" x:Name="txtBoxam1" Grid.Column="2" LostFocus="txtBoxam1_LostFocus"/> 
     <TextBox Background="#FFC6C3C6" Foreground="White" IsEnabled="True" Margin="8,8,33.972,8" x:Name="txtBoxamt2" Grid.Column="3" LostFocus="txtBoxamt2_LostFocus"/> 
    </Grid> 
</UserControl> 

ウィンドウXAML

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="123" Width="1098" xmlns:my="clr-namespace:WpfApplication1" MouseDoubleClick="Window_MouseDoubleClick"> 

    <ScrollViewer VerticalScrollBarVisibility="Auto"> 
     <StackPanel Name="stackPanel1" VerticalAlignment="top" HorizontalAlignment="Left" > 
      <my:UserControl1 x:Name="userControl11" Width="1077" /> 
     </StackPanel> 
    </ScrollViewer> 

</Window> 

メインウィンドウコード

ここで
public partial class MainWindow : Window 
{ 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     UserControl1 newUserControl = new UserControl1(); 
     newUserControl.Width = userControl11.Width; 
     newUserControl.Height = userControl11.Height; 
     stackPanel1.Children.Add(newUserControl); 
    } 

} 

は、私はあなたがあなたのラベルやなどを開催し、StackPanelにそれを追加するためにDockPanelを使用したい場合がありTextBox'sを保持するためにStackPanelを使用しています、基本的な考え方です。

XAML

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <StackPanel Name="myContainer"> 
      <TextBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" KeyDown="textBox1_KeyDown" /> 
      <TextBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" KeyDown="textBox2_KeyDown"/> 
     </StackPanel> 
    </Grid> 
</Window> 

コード

public partial class MainWindow : Window 
{ 
    Collection<Control> myControls = new Collection<Control>(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
     myControls.Add(textBox2); 
    } 


    private void textBox2_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      int temp; 
      int sum; 
      sum = 0; 
      foreach (TextBox tb in myControls) 
      { 
       if (int.TryParse(tb.Text, out temp)) 
       { 
        sum += temp; 
       } 
      } 
      int test = 0; 
      if (int.TryParse(textBox1.Text, out test)) 
      { 
       if (sum < test) 
       { 
        TextBox newtb = new TextBox(); 
        newtb.Width = ((TextBox)sender).Width; 
        newtb.Height = ((TextBox)sender).Height; 
        newtb.Margin = new Thickness(((TextBox)sender).Margin.Left, ((TextBox)sender).Margin.Top , ((TextBox)sender).Margin.Right , ((TextBox)sender).Margin.Bottom); 
        newtb.HorizontalAlignment = ((TextBox)sender).HorizontalAlignment; 
        newtb.KeyDown += new KeyEventHandler(textBox2_KeyDown); 
        myContainer.Children.Add(newtb); 
        myControls.Add(newtb); 
        newtb.Focus(); 
       } 
       else 
        this.Background = Brushes.LightBlue; 
      } 
     } 
    } 

    private void textBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      textBox2.Focus(); 
     } 
    } 
} 
0

項目にコレクションを渡します。次に、必要に応じてセットにコレクションを追加します。

public class dynamicInts 
{ 
    private int dInt; 
    private ObservableCollection<DynamicInt> dynamicInts 

    public int DInt 
    { 
     get { return dInt; } 
     set 
     { 
      value = dInt; 
      int sumInt; 
      foreach (DynamicInt di in dynamicInts) sumInt += di.Dint) 
      if (sumInt < 2*dynamicInts) dynamicInts.add(newdynamicInts ... 
関連する問題