Не указан аргумент, соответствующий требуемому формальному параметру «отправитель» MainWindow

#c# #wpf

#c# #wpf

Вопрос:

Я совершенно новичок в программировании. В настоящее время я пытаюсь создать приложение WPF, которое будет вычислять квадратный корень и т.д. из числа1. У меня проблема с использованием метода, который вычисляет квадратный корень (и не только). Я получил сообщение об ошибке:

Не задан аргумент, соответствующий требуемому формальному параметру «отправитель» MainWindow.RadioBT_Root2_Checked(object, RoutedEventArgs)’

Эта ошибка возникает в RadioBT_Root3_Checked и RadioBT_Root4_Checked, потому что у меня есть 3 метода.

Его код — CS7036. Что я делаю плохо? Я так много искал, но не могу его найти (или я не могу искать).

 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 Examples {
  /// <summary>
  /// Interaction logic for MainWindow.xaml
  /// </summary>
  public partial class MainWindow: Window {
    public MainWindow() {
      InitializeComponent();
    }

    double number1;
    double number2;
    double resu<

    private void TXB_1_TextChanged(object sender, TextChangedEventArgs e) {

    }

    private void TXB_2_TextChanged(object sender, TextChangedEventArgs e) {

    }

    private void BT_Potegowanie_Click(object sender, RoutedEventArgs e) {
      try {
        number1 = double.Parse(TXB_1.Text);
        number2 = double.Parse(TXB_2.Text);
        result = Math.Pow(number1, number2);

        MessageBox.Show("WYNIK: "   result.ToString());

      } catch (Exception) {
        MessageBox.Show("Wystąpił błąd.", "Błąd", MessageBoxButton.OK, MessageBoxImage.Error);
      }
    }

    public void BT_Root_Click(object sender, RoutedEventArgs e) {
      if (RadioBT_Root2_Checked()) ///CS7036
        MessageBox.Show("RESULT: "   result.ToString());

      if (RadioBT_Root3_Checked()) ///CS7036
        MessageBox.Show("RESULT: "   result.ToString());

      if (RadioBT_Root4_Checked()) ///CS7036
        MessageBox.Show("RESULT: "   result.ToString());
    }

    public void RadioBT_Root2_Checked(object sender, RoutedEventArgs e) {
      number1 = double.Parse(TXB_1.Text);
      result = Math.Sqrt(number1);
    }

    public void RadioBT_Root3_Checked(object sender, RoutedEventArgs e) {
      number1 = double.Parse(TXB_1.Text);
      number2 = (1 / 3.0);
      result = Math.Pow(number1, number2);
    }

    public void RadioBT_Root4_Checked(object sender, RoutedEventArgs e) {
      number1 = double.Parse(TXB_1.Text);
      number2 = (1 / 4.0);
      result = Math.Pow(number1, number2);
    }
  }
}
  

РЕДАКТИРОВАТЬ: я сделал то, что предложил Эд Планкетт, и теперь у меня другая проблема. Это связано с XAML (я думаю). Я также обнаружил, что мне может понадобиться place ‘?? в некоторых местах false. В списке ошибок указано: ‘MainWindow’ не содержит определения ‘RadioBT_Root4_Checked’ и не удалось найти метод расширения ‘RadioBT_Root4_Checked’, принимающий первый аргумент типа ‘MainWindow’ (вам не хватает директивы using или ссылки на сборку?)

 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 Examples
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void TXB_1_TextChanged(object sender, TextChan`enter code here`gedEventArgs e)
        {

        }

        private void TXB_2_TextChanged(object sender, TextChangedEventArgs e)
        {

        }

        public void BT_Root_Click(object sender, RoutedEventArgs e)
        {
            double number1 = 0;
            double number2 = 0;
            double result = 0;

            if (RadioBT_Root2.IsChecked ?? false)    ///CS0266
            {
                number1 = double.Parse(TXB_1.Text);
                result = Math.Sqrt(number1);
            }
            else if (RadioBT_Root3.IsChecked ?? false)   ///CS0266
            {
                number1 = double.Parse(TXB_1.Text);
                number2 = (1 / 3.0);
                result = Math.Pow(number1, number2);
            }
            else if (RadioBT_Root4.IsChecked ?? false)   ///CS0266
            {
                number1 = double.Parse(TXB_1.Text);
                number2 = (1 / 4.0);
                result = Math.Pow(number1, number2);
            }

            MessageBox.Show("RESULT: "   result.ToString());
        }       
    }
  

Мой код XAML:

 <Window x:Class="Examples.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:Examples"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Label x:Name="label" Content="First numberamp;#xD;amp;#xA;amp;#xA;First number" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" Width="117" Height="31" FontSize="15"/>
        <TextBox x:Name="TXB_1" HorizontalAlignment="Left" Height="28" Margin="132,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" FontSize="15" TextChanged="TXB_1_TextChanged"/>
        <Label x:Name="label1" Content="Second numberamp;#xD;amp;#xA;amp;#xA;Second numberamp;#xD;amp;#xA;" HorizontalAlignment="Left" Margin="10,46,0,0" VerticalAlignment="Top" Width="117" Height="30" FontSize="15"/>
        <TextBox x:Name="TXB_2" HorizontalAlignment="Left" Height="28" Margin="132,48,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" TextChanged="TXB_2_TextChanged" FontSize="15"/>
        <Separator HorizontalAlignment="Left" Height="19" Margin="0,69,0,0" VerticalAlignment="Top" Width="517"/>
        <Button x:Name="BT_Root" Content="ROOT" HorizontalAlignment="Left" Margin="10,81,0,0" VerticalAlignment="Top" Width="128" Height="48" FontSize="16" Click="BT_Root_Click"/>
        <RadioButton x:Name="RadioBT_Root2" Content="Root2" HorizontalAlignment="Left" Margin="143,81,0,0" VerticalAlignment="Top" Checked="RadioBT_Root2_Checked"/>
        <RadioButton x:Name="RadioBT_Root3" Content="Root3" HorizontalAlignment="Left" Margin="143,96,0,0" VerticalAlignment="Top" Checked="RadioBT_Root3_Checked"/>
        <RadioButton x:Name="RadioBT_Root4" Content="Root4" HorizontalAlignment="Left" Margin="143,111,0,0" VerticalAlignment="Top" Checked="RadioBT_Root4_Checked"/>
    </Grid>
</Window>  

Я также попытался изменить ‘Checked=»RadioBT_Root4_Checked»/>’ на ‘Checked=»RadioBT_Root4.Проверено «/>’. В нем говорится: «Ошибка проверена =»RadioBT_Root2.IsChecked» недопустимо. ‘RadioBT_Root2.IsChecked’ не является допустимым именем метода обработчика событий. Допустимы только методы экземпляра в сгенерированном или кодовом классе. ‘

Комментарии:

1. Пожалуйста, опубликуйте свой XAML тоже

2. Вы должны остановиться здесь и сначала прочитать и понять книгу о программировании на C #.

Ответ №1:

Вы вызываете свои обработчики событий — например, RadioBT_Root2_Checked — без параметров, хотя для них требуется два параметра. Вы также действуете так, как будто они «возвращаются» bool , хотя они ничего не «возвращают».

Что означает «return»? 1 3 ВОЗВРАТ 4 :

 int x = 1   3;
  

Теперь x равно 4.

Функции могут возвращать значения:

 public bool GreaterThan(int x, int y) { return x > y; }
  

Используйте его следующим образом:

 if (GreaterThan(10, 9))
{
    MessageBox.Show("10 is greater than 9");
}
  

Но я думаю, что вы действительно не хотите вызывать эти методы. Я думаю, это то, что вы хотите:

Я думаю, вы хотите узнать, какой флажок пользователь нажал, а затем показать этот результат. Результаты вычисляются при установке флажков; эти функции являются обработчиками событий. Чтобы узнать, установлен ли каждый флажок, посмотрите на объект checkbox — используя имя, которое вы ему дали, — и посмотрите на его IsChecked свойство.

Вот так:

 public void BT_Root_Click(object sender, RoutedEventArgs e) 
{
    if (RadioBT_Root2.IsChecked)
        MessageBox.Show("RESULT: "   result.ToString());
    else if (RadioBT_Root3.IsChecked)
        MessageBox.Show("RESULT: "   result.ToString());
    else if (RadioBT_Root4.IsChecked)
        MessageBox.Show("RESULT: "   result.ToString());
}
  

Кроме того, посмотрите на эти операторы if: все три делают одно и то же. Вы можете упростить дальше:

 public void BT_Root_Click(object sender, RoutedEventArgs e) 
{
    MessageBox.Show("RESULT: "   result.ToString());
}
  

Но вот лучший способ:

 public void BT_Root_Click(object sender, RoutedEventArgs e) 
{
    double number1 = 0;
    double number2 = 0;
    double result = 0;

    if (RadioBT_Root2.IsChecked)
    {
        number1 = double.Parse(TXB_1.Text);
        result = Math.Sqrt(number1);
    }
    else if (RadioBT_Root3.IsChecked)
    {
        number1 = double.Parse(TXB_1.Text);
        number2 = (1 / 3.0);
        result = Math.Pow(number1, number2);
    }
    else if (RadioBT_Root4.IsChecked)
    {
        number1 = double.Parse(TXB_1.Text);
        number2 = (1 / 4.0);
        result = Math.Pow(number1, number2);
    }

    MessageBox.Show("RESULT: "   result.ToString());
}
  

Вам не нужно result , number , и number2 быть членами класса, и вам вообще не нужны эти *_Checked обработчики событий.