Создание конвектора системы счисления на С# на WPF

Пишу первый раз программу. Помогите с объяснением обработчиков событий для ComboBox.

<Window x:Class="LAB2SVPPTASK2.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:LAB2SVPPTASK2"
        mc:Ignorable="d"
        Title="Конвектор" Height="150" Width="200">
    <Grid>
        <ComboBox Name="comboBox" HorizontalAlignment="Center" Margin="0,51,0,0" VerticalAlignment="Top" Width="120" SelectionChanged="ComboBox_SelectionChanged">
            <ComboBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ComboBox.ItemsPanel>
            <ComboBoxItem Content="Десятичное в двоичное" />
            <ComboBoxItem Content="Десятичное в троичное" />
            <ComboBoxItem Content="Десятичное в пятеричное" />
            <ComboBoxItem Content="Десятичное в восьмеричное" />
            <ComboBoxItem Content="Десятичное в шестнадцатеричное"/>
        </ComboBox>
        <TextBlock HorizontalAlignment="Center" Margin="0,15,0,0" TextWrapping="Wrap" Text="Выберите операцию" VerticalAlignment="Top" Height="24" Width="148"/>
    </Grid>
</Window>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace LAB2SVPPTASK2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            InitializeComboBox();
        }

        private void InitializeComboBox()
        {
            // Initialize ComboBox with base numbers from 2 to 16
            for (int i = 2; i <= 16; i++)
            {
                ComboBoxItem item = new ComboBoxItem();
                item.Content = $"{i}";
                item.Tag = i;
                ComboBox.Items.Add(item);
            }
        }

        private void ComboBox_SelectionChanged(object sender, RoutedEventArgs e, TextBox textBox)
        {
            // Get the selected base number from ComboBox
            ComboBoxItem selectedItem = (ComboBoxItem)ComboBox.SelectedItem;
            int targetBase = (int)selectedItem.Tag;

            // Get the number to be converted from TextBox
            string number = textBox.Text;

            // Convert the number from the source base to the target base
            string convertedNumber = ConvertNumber(number, 10, targetBase);

            // Show the converted number in a MessageBox
            MessageBox.Show($"Converted number: {convertedNumber}");
        }

        private string ConvertNumber(string number, int sourceBase, int targetBase)
        {
            // Convert the number from the source base to the target base
            int decimalValue = Convert.ToInt32(number, sourceBase);
            string result = Convert.ToString(decimalValue, targetBase);

            return result;
        }

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }
    }
}

Ответы (1 шт):

Автор решения: AlexanderSt

Начать нужно отсюда: Практическое руководство. Добавление обработчика событий (WPF .NET)

Обработчик события имеет вид void <имя_обработчика>(object, event_arg) и не знает ничего об аргументе TextBox textBox

В Вашем коде, при выборе элемента в ComboBox, сработает вызов обработчика событий private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e), который у Вас не содержит инструкций.
Получение конвертированного значения следует обернуть в try...catch или почитать документацию на Convert.ToString (short value, int toBase), в которой указано

Исключения
ArgumentException
toBase не равно 2, 8, 10 или 16.

т.е. два варианта преобразования гарантированно приведут к выбрасыванию исключения и Ваша программа будет аварийно завершена.

Если Вы плохо представляете, как работают циклы и что в результате окажется в коллекции элементов ComboBox, необходимо глубже изучить этот раздел, а пока - избавиться от конструкции

for (int i = 2; i <= 16; i++)
        {
            ComboBoxItem item = new ComboBoxItem();
            item.Content = $"{i}";
            item.Tag = i;
            ComboBox.Items.Add(item);
        }

и задать значения вручную

    <ComboBoxItem Content="Десятичное в двоичное" Tag="2"/>
    <ComboBoxItem Content="Десятичное в троичное" Tag="3"/>
    <ComboBoxItem Content="Десятичное в пятеричное" Tag="5"/>
    <ComboBoxItem Content="Десятичное в восьмеричное" Tag="8"/>
    <ComboBoxItem Content="Десятичное в шестнадцатеричное" Tag="16"/>

Если уж так не хочется придерживаться общепринятого подхода WPF:

<Window x:Class="WpfApp1.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:WpfApp1"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="0.3*"/>
        <ColumnDefinition Width="0.4*"/>
        <ColumnDefinition Width="0.3*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" TextWrapping="Wrap" Text="Выберите операцию" VerticalAlignment="Top" Height="24" />
    <ComboBox Name="cbxCombo" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center"  VerticalAlignment="Top" SelectionChanged="comboBox_SelectionChanged">
        <ComboBoxItem Content="Десятичное в двоичное" Tag="2"/>
        <ComboBoxItem Content="Десятичное в троичное" Tag="3"/>
        <ComboBoxItem Content="Десятичное в пятеричное" Tag="5"/>
        <ComboBoxItem Content="Десятичное в восьмеричное" Tag="8"/>
        <ComboBoxItem Content="Десятичное в шестнадцатеричное" Tag="16"/>
    </ComboBox>
    <TextBox Name="tbxSource" Grid.Row="1" Grid.Column="0" Text="Число для преобразования" />
    <TextBlock Name="tbResult" Grid.Row="1" Grid.Column="2" Text="Результат" />
    <TextBlock Name="tbError" Grid.Row="2" Grid.Column="1" TextWrapping="Wrap" HorizontalAlignment="Center" Margin="0 30" Text=""/>
</Grid>
using System.Windows;
using System.Windows.Controls;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

    private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        tbError.Text = "";
        // Get the selected base number from ComboBox
        ComboBoxItem selectedItem = (ComboBoxItem)((ComboBox)sender).SelectedItem;

        if (!int.TryParse(selectedItem.Tag.ToString(), out int targetBase))
            return;

        try
        {
            tbResult.Text = ConvertNumber(tbxSource.Text, 10, targetBase); ;

        }
        catch (Exception ex)
        {
            tbError.Text = "Произошла ошибка: " + ex.Message;
        }
    }

        private string ConvertNumber(string number, int sourceBase, int targetBase)
        {
            // Convert the number from the source base to the target base
            int decimalValue = Convert.ToInt32(number, sourceBase);
            string result = Convert.ToString(decimalValue, targetBase);

             return result;
        }
    }
}
→ Ссылка