Jelajahi Sumber

Осталось всего лишь доделать всё приложение

Никита Кашлач 3 tahun lalu
induk
melakukan
939fb77874
2 mengubah file dengan 218 tambahan dan 19 penghapusan
  1. 28 12
      MatrixXAMLOnly/MainWindow.xaml
  2. 190 7
      MatrixXAMLOnly/MainWindow.xaml.cs

+ 28 - 12
MatrixXAMLOnly/MainWindow.xaml

@@ -68,7 +68,7 @@
                     <ControlTemplate TargetType="{x:Type Button}">
                         <Border BorderThickness="0 0 0 1" BorderBrush="#373737">
                             <Grid>
-                                <TextBlock x:Name="TextBlockTemplateHamburgerMenuItem" Text="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="Wrap" TextAlignment="Center"/>
+                                <TextBlock Text="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" TextWrapping="NoWrap" TextAlignment="Center"/>
                             </Grid>
                         </Border>
 
@@ -108,14 +108,14 @@
         <!-- CurtainMenu -->
         <Grid x:Name="CurtainMenu" Panel.ZIndex="1" Grid.Row="0" Grid.RowSpan="3" Width="0" HorizontalAlignment="Left" Background="#FFE8E9EB" Opacity="0.95">
             <StackPanel Margin="0 70 0 0" Orientation="Vertical">
-                <Button Content="Сложение матрицы" Style="{StaticResource HamburgerMenuItemBtn}"/>
-                <Button Content="Вычитание матрицы" Style="{StaticResource HamburgerMenuItemBtn}"/>
-                <Button Content="Умножение матрицы на скаляр" Style="{StaticResource HamburgerMenuItemBtn}"/>
-                <Button Content="Транспонирование матрицы" Style="{StaticResource HamburgerMenuItemBtn}"/>
-                <Button Content="Умножение матрицы на её транспонированную матрицу" Style="{StaticResource HamburgerMenuItemBtn}"/>
-                <Button Content="Перестановка строк" Style="{StaticResource HamburgerMenuItemBtn}"/>
-                <Button Content="Перестановка строк согласно вектору транспозиции" Style="{StaticResource HamburgerMenuItemBtn}"/>
-                <Button Content="Обратная матрица" Style="{StaticResource HamburgerMenuItemBtn}"/>
+                <Button x:Name="BtnAddition" Style="{StaticResource HamburgerMenuItemBtn}" Click="BtnAddition_Click"/>
+                <Button x:Name="BtnDifference" Style="{StaticResource HamburgerMenuItemBtn}" Click="BtnDifference_Click"/>
+                <Button x:Name="BtnMultiplicationOnScalar" Style="{StaticResource HamburgerMenuItemBtn}" Click="BtnMultiplicationOnScalar_Click"/>
+                <Button x:Name="BtnTransposition" Style="{StaticResource HamburgerMenuItemBtn}" Click="BtnTransposition_Click"/>
+                <Button x:Name="BtnMultiplicationOnTransposed" Style="{StaticResource HamburgerMenuItemBtn}" Click="BtnMultiplicationOnTransposed_Click"/>
+                <Button x:Name="BtnRowsReplace" Style="{StaticResource HamburgerMenuItemBtn}" Click="BtnRowsReplace_Click"/>
+                <Button x:Name="BtnRowsReplaceOnTranspositionVector" Style="{StaticResource HamburgerMenuItemBtn}" Click="BtnRowsReplaceOnTranspositionVector_Click"/>
+                <Button x:Name="BtnInverse" Style="{StaticResource HamburgerMenuItemBtn}" Click="BtnInverse_Click"/>
             </StackPanel>
         </Grid>
 
@@ -137,6 +137,22 @@
                     <ColumnDefinition/>
                 </Grid.ColumnDefinitions>
 
+                <Grid Grid.Column="1">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition/>
+                        <ColumnDefinition/>
+                    </Grid.ColumnDefinitions>
+                    
+                    <StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
+                        <TextBlock Text="Количество строк: " VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="24"/>
+                        <TextBox MinHeight="30" MinWidth="30" VerticalAlignment="Center" HorizontalAlignment="Center" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" MaxLength="1"/>
+                    </StackPanel>
+
+                    <StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
+                        <TextBlock Text="Количество столбцов: " VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="24"/>
+                        <TextBox MinHeight="30" MinWidth="30" VerticalAlignment="Center" HorizontalAlignment="Center" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" MaxLength="1"/>
+                    </StackPanel>
+                </Grid>
             </Grid>
 
             <!-- MidlleBody -->
@@ -254,7 +270,7 @@
                         <Grid.ColumnDefinitions>
                             <ColumnDefinition/>
                             <ColumnDefinition Width="0.05*"/>
-                            <ColumnDefinition/>
+                            <ColumnDefinition Width="0.3*"/>
                             <ColumnDefinition Width="0.05*"/>
                             <ColumnDefinition/>
                         </Grid.ColumnDefinitions>
@@ -282,7 +298,7 @@
             </Grid>
         </Grid> <!-- MultiplicationOnScalar -->
 
-        <!-- Transpose -->
+        <!-- Transposition -->
         <Grid x:Name="GridContentTranspose" Grid.RowSpan="3" Visibility="Collapsed">
             <Grid.RowDefinitions>
                 <RowDefinition/>
@@ -326,7 +342,7 @@
             <Grid Grid.Row="2">
 
             </Grid>
-        </Grid> <!-- Transpose -->
+        </Grid> <!-- Transposition -->
 
         <!-- MultiplicationOnTransposed -->
         <Grid x:Name="GridContentMultiplicationOnTransposed" Grid.RowSpan="3" Visibility="Collapsed">

+ 190 - 7
MatrixXAMLOnly/MainWindow.xaml.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Linq;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Controls.Primitives;
@@ -13,14 +14,23 @@ namespace MatrixXAMLOnly
     /// </summary>
     public partial class MainWindow : Window
     {
-
+        Operation operation;
 
         public MainWindow()
         {
             InitializeComponent();
+            operation = Operation.NoChosen;
+
+            BtnAddition.Content = "Сложение матрицы";
+            BtnDifference.Content = "Вычитание матрицы";
+            BtnMultiplicationOnScalar.Content = "Умножение матрицы \nна скаляр";
+            BtnTransposition.Content = "Транспонирование матрицы";
+            BtnMultiplicationOnTransposed.Content = "Умножение матрицы на её \nтранспонированную матрицу";
+            BtnRowsReplace.Content = "Перестановка строк";
+            BtnRowsReplaceOnTranspositionVector.Content = "Перестановка строк согласно \nвектору транспозиции";
+            BtnInverse.Content = "Обратная матрицы";
+
 
-            GridContentAddition.Visibility = Visibility.Visible;
-            GridAdditionFrstTerm.Children.Add(CreateMatrix(5, 5));
         }
 
         private void BtnHamburgerMenu_Click(object sender, RoutedEventArgs e)
@@ -61,6 +71,7 @@ namespace MatrixXAMLOnly
             }
 
             // Добавление TextBox'ов
+            int tabCounter = 1;
             for (int i = 0; i < a; i++)
             {
                 for (int j = 0; j < b; j++)
@@ -68,13 +79,16 @@ namespace MatrixXAMLOnly
                     TextBox textBox = new TextBox()
                     {
                         HorizontalContentAlignment = HorizontalAlignment.Center,
-                        VerticalContentAlignment = VerticalAlignment.Center
+                        VerticalContentAlignment = VerticalAlignment.Center,
+                        TabIndex = tabCounter
                     };
 
+                    tabCounter++;
+
                     textBox.KeyDown += TextBox_KeyDown;
 
-                    Grid.SetColumn(textBox, i);
-                    Grid.SetRow(textBox, j);
+                    Grid.SetColumn(textBox, j);
+                    Grid.SetRow(textBox, i);
                     matrixGrid.Children.Add(textBox);
                 }
             }
@@ -84,6 +98,17 @@ namespace MatrixXAMLOnly
 
         private void TextBox_KeyDown(object sender, KeyEventArgs e)
         {
+            if (e.Key == Key.W ||
+                e.Key == Key.A ||
+                e.Key == Key.S ||
+                e.Key == Key.D ||
+                e.Key == Key.Tab)
+            {
+                e.Handled = true;
+                FocusOnNext((TextBox)sender, e.Key);
+                return;
+            }
+
             if (e.Key != Key.NumPad0 && e.Key != Key.D0 &&
                 e.Key != Key.NumPad1 && e.Key != Key.D1 &&
                 e.Key != Key.NumPad2 && e.Key != Key.D2 &&
@@ -98,6 +123,163 @@ namespace MatrixXAMLOnly
                 e.Handled = true;
             }
         }
+
+        private void FocusOnNext(TextBox tb, Key KeyArg)
+        {
+            Grid matrixGrid = (Grid)tb.Parent;
+            int columns = matrixGrid.ColumnDefinitions.Count;
+            int rows = matrixGrid.RowDefinitions.Count;
+            int element = tb.TabIndex;
+
+            if (((int)KeyArg) == 40 || KeyArg == Key.S)
+            {
+                element += rows;
+            }
+            else if ((int)KeyArg == 38 || KeyArg == Key.W)
+            {
+                element -= rows;
+            }
+            else if ((int)KeyArg == 37 || KeyArg == Key.A)
+            {
+                element -= 1;
+            }
+            else if ((int)KeyArg == 39 || KeyArg == Key.D || KeyArg == Key.Tab)
+            {
+                element += 1;
+            }
+            else
+            {
+                return;
+            }
+
+
+            int counter = 0;
+            for (int i = 0; i < columns; i++)
+            {
+                for (int j = 0; j < rows; j++)
+                {
+                    counter++;
+                    if (element == counter)
+                    {
+                        matrixGrid.Children.Cast<TextBox>().First(e => Grid.GetColumn(e) == j && Grid.GetRow(e) == i).Focus();
+                    }
+                }
+            }
+            
+        }
+
+
+        #region HumburgerMenuItems
+        private void BtnAddition_Click(object sender, RoutedEventArgs e)
+        {
+            GridContentAddition.Visibility = Visibility.Visible;
+            GridContentDifference.Visibility = Visibility.Collapsed;
+            GridContentMultiplication.Visibility = Visibility.Collapsed;
+            GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
+            GridContentRowsReplace.Visibility = Visibility.Collapsed;
+            GridContentTranspose.Visibility = Visibility.Collapsed;
+            // GridContentRowReplaceOnTranspositionVector;
+            // GridContentInverse;
+
+            GridAdditionFrstTerm.Children.Add(CreateMatrix(5, 5));
+            GridAdditionScndTerm.Children.Add(CreateMatrix(5, 5));
+            GridAdditionResult.Children.Add(CreateMatrix(5, 5));
+        }
+
+        private void BtnDifference_Click(object sender, RoutedEventArgs e)
+        {
+            GridContentAddition.Visibility = Visibility.Collapsed;
+            GridContentDifference.Visibility = Visibility.Visible;
+            GridContentMultiplication.Visibility = Visibility.Collapsed;
+            GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
+            GridContentRowsReplace.Visibility = Visibility.Collapsed;
+            GridContentTranspose.Visibility = Visibility.Collapsed;
+            // GridContentRowReplaceOnTranspositionVector;
+            // GridContentInverse;
+
+            GridDifferenceFrstTerm.Children.Add(CreateMatrix(5, 5));
+            GridDifferenceScndTerm.Children.Add(CreateMatrix(5, 5));
+            GridDifferenceResult.Children.Add(CreateMatrix(5, 5));
+        }
+
+        private void BtnMultiplicationOnScalar_Click(object sender, RoutedEventArgs e)
+        {
+            GridContentAddition.Visibility = Visibility.Collapsed;
+            GridContentDifference.Visibility = Visibility.Collapsed;
+            GridContentMultiplication.Visibility = Visibility.Visible;
+            GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
+            GridContentRowsReplace.Visibility = Visibility.Collapsed;
+            GridContentTranspose.Visibility = Visibility.Collapsed;
+            // GridContentRowReplaceOnTranspositionVector;
+            // GridContentInverse;
+
+            GridMultiplicationOnScalarFrstTerm.Children.Add(CreateMatrix(5, 5));
+            GridMultiplicationOnScalarResult.Children.Add(CreateMatrix(5, 5));
+        }
+
+        private void BtnTransposition_Click(object sender, RoutedEventArgs e)
+        {
+            GridContentAddition.Visibility = Visibility.Collapsed;
+            GridContentDifference.Visibility = Visibility.Collapsed;
+            GridContentMultiplication.Visibility = Visibility.Collapsed;
+            GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
+            GridContentRowsReplace.Visibility = Visibility.Collapsed;
+            GridContentTranspose.Visibility = Visibility.Visible;
+            // GridContentRowReplaceOnTranspositionVector;
+            // GridContentInverse;
+
+            GridTransposeFrom.Children.Add(CreateMatrix(3, 5));
+            GridTransposed.Children.Add(CreateMatrix(5, 3));
+        }
+
+        private void BtnMultiplicationOnTransposed_Click(object sender, RoutedEventArgs e)
+        {
+            GridContentAddition.Visibility = Visibility.Collapsed;
+            GridContentDifference.Visibility = Visibility.Collapsed;
+            GridContentMultiplication.Visibility = Visibility.Collapsed;
+            GridContentMultiplicationOnTransposed.Visibility = Visibility.Visible;
+            GridContentRowsReplace.Visibility = Visibility.Collapsed;
+            GridContentTranspose.Visibility = Visibility.Collapsed;
+            // GridContentRowReplaceOnTranspositionVector;
+            // GridContentInverse;
+        }
+
+        private void BtnRowsReplace_Click(object sender, RoutedEventArgs e)
+        {
+            GridContentAddition.Visibility = Visibility.Collapsed;
+            GridContentDifference.Visibility = Visibility.Collapsed;
+            GridContentMultiplication.Visibility = Visibility.Collapsed;
+            GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
+            GridContentRowsReplace.Visibility = Visibility.Visible;
+            GridContentTranspose.Visibility = Visibility.Collapsed;
+            // GridContentRowReplaceOnTranspositionVector;
+            // GridContentInverse;
+        }
+
+        private void BtnInverse_Click(object sender, RoutedEventArgs e)
+        {
+            GridContentAddition.Visibility = Visibility.Collapsed;
+            GridContentDifference.Visibility = Visibility.Collapsed;
+            GridContentMultiplication.Visibility = Visibility.Collapsed;
+            GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
+            GridContentRowsReplace.Visibility = Visibility.Collapsed;
+            GridContentTranspose.Visibility = Visibility.Collapsed;
+            // GridContentRowReplaceOnTranspositionVector;
+            // GridContentInverse;
+        }
+
+        private void BtnRowsReplaceOnTranspositionVector_Click(object sender, RoutedEventArgs e)
+        {
+            GridContentAddition.Visibility = Visibility.Collapsed;
+            GridContentDifference.Visibility = Visibility.Collapsed;
+            GridContentMultiplication.Visibility = Visibility.Collapsed;
+            GridContentMultiplicationOnTransposed.Visibility = Visibility.Collapsed;
+            GridContentRowsReplace.Visibility = Visibility.Collapsed;
+            GridContentTranspose.Visibility = Visibility.Collapsed;
+            // GridContentRowReplaceOnTranspositionVector;
+            // GridContentInverse;
+        }
+        #endregion
     }
 
     enum Operation
@@ -109,6 +291,7 @@ namespace MatrixXAMLOnly
         MultiplicationOnTransposed,
         RowReplace,
         RowReplaceOnTranspositionVector,
-        Inverse
+        Inverse,
+        NoChosen
     }
 }