-1

I am learning algorithmics and C#, and I wanted to write a sudoku solver with some WPF interface. I need 81 textboxes (one for each sudoku box) and I wanted to generate them with code and put them in array, instead of having 81 different objects. I used the Visual Studio toolbox to drag and drop buttons in my main window. I also drag and dropped TextBoxes to get an idea how they would look like.

I don't find how to add the TextBoxes to the main Window, using a loop.

Here is the MainWindow.x.aml code :

<Window x:Class="SudokuPOO.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SudokuPOO"
    mc:Ignorable="d"
    Title="Solveur de Sudoku" Height="260" Width="210">
<Grid>
<!--
    <TextBox x:Name="T0" HorizontalAlignment="Left" Margin=" 10,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="20"/>
    <TextBox x:Name="T1" HorizontalAlignment="Left" Margin=" 30,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="20"/>
    [ I DELETED STUFF HERE ]

-->
    <Button Content="Résoudre" HorizontalAlignment="Left" Margin="10,210,0,0" VerticalAlignment="Top" Click="Resoudre"/>
    <Button Content="Effacer tout" HorizontalAlignment="Left" Margin="75,210,0,0" VerticalAlignment="Top" Click="Effacer"/>

</Grid>

Here is the MainWindow.x.aml.cs I am trying to edit :

    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent(); // Was already here.
        GenerateTextBoxes();   // I added that manually.
    }
    public void GenerateTextBoxes()
    {
        TextBox[] TextBoxes = new TextBox[5];
        for (int i = 0; i<=4; i++)
        {
            TextBox TBox = new TextBox();
            TBox.Margin = new Thickness(10+20*i, 10, 0, 0);
            TBox.Text = i.ToString();
            TBox.Width = 20;
            TBox.Height = 20;
            // this.Controls.Add(TBox); // Doesn't work. 
            this.Content = TBox; // Trouble here.
            TextBoxes[i] = TBox;
        }
    }
}

I tried with only 5 textboxes to understand what is happening. This code runs, it displays the MainWindow, but with only one TextBox with "4" in it. My guess is that

this.Content = Tbox;

replaces all content of the window with only one TBox. How do I a just add the Tbox ? The XAML files suggests that a "TextBox" is inside a "Grid" that is inside the "MainWindow", but "this.Grid" doesn't exist, neither "MainWindow.Grid".

I tried stuff like "LayoutRoot.Children.Add", "this.Controls.Add", "this.Grid.Add" and so on, nothing works. Almost all the code I can find online related to TextBox in C# uses "Windows Forms" and not "WPF" and doesn't work in my case (like how to define an array of textboxes in c#? ).

0

1 Answer 1

1

Give the root panel in the XAML markup a name:

<Grid x:Name="grid">

...and then add the textboxes to the panel's Children collection:

grid.Children.Add(TBox);

Also note that that there might be better panels to use for layout instead of mocking around with margins: https://learn.microsoft.com/en-us/dotnet/desktop/wpf/controls/panels-overview?view=netframeworkdesktop-4.8

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.