QuantumNova Ответов: 1

Вопрос переноса переменной на кнопку функции


Здравствуйте кодеры, у меня возникла проблема, когда я пытаюсь передать случайно сгенерированное значение переменной в функцию on_click, значение кажется пустым и не передается, как должно быть, я действительно не могу понять, почему возникает эта проблема, так что если кто-то может помочь, это будет очень ценно, спасибо.

(ps извините за публикацию почти всего кода, но я действительно не мог понять, где я ошибся)

Что я уже пробовал:

public MainWindow()
        {
            InitializeComponent();
            RandomImage();
        }

        private string correctFlag { get; set; }
        public void RandomImage()
        {
            string[] flags = { "Afghanistan", "Albania", "Algeria", "Andorra", "Angola", "Antigua and Barboda", "Argentina",
                "Armenia", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados"};

            Random num = new Random();
            String correctFlag = flags[num.Next(0, flags.Length)];
            String flag2 = flags[num.Next(0, flags.Length)];
            String flag3 = flags[num.Next(0, flags.Length)];
            String flag4 = flags[num.Next(0, flags.Length)];

            String FlagUri = $"flags/flags 3.0/{correctFlag}.png";

            flagBox.Source = new BitmapImage(new Uri(FlagUri, UriKind.Relative));
            RandomButttons(correctFlag, flag2, flag3, flag4);
    }

        public void RandomButttons(string correctFlag, string flag2, string flag3, string flag4)
        {
            Random rnd = new Random();
            int RndButton = rnd.Next(1, 5);
            Console.WriteLine(RndButton);

            if (RndButton == 1)//this works as it should
            {
                Button1.Content = correctFlag;
                Button2.Content = flag2;
                Button3.Content = flag3;
                Button4.Content = flag4;
            }
            else if (RndButton == 2)//this works as it should
            {
                Button2.Content = correctFlag;
                Button1.Content = flag2;
                Button3.Content = flag3;
                Button4.Content = flag4;
            }
            else if (RndButton == 3)//this works as it should
            {
                Button3.Content = correctFlag;
                Button2.Content = flag2;
                Button1.Content = flag3;
                Button4.Content = flag4;
            }
            else if (RndButton == 4)//this works as it should
            {
                Button4.Content = correctFlag;
                Button2.Content = flag2;
                Button3.Content = flag3;
                Button1.Content = flag4;
            }
        }


        private void Button1_clicked(object sender, RoutedEventArgs e)
        {
            //MessageBox.Show(correctFlag); // here the message box just shows a blank box
            if ((string)Button1.Content == correctFlag) // this does not activate because of the issue mentioned above
            {
                MessageBox.Show("good job");
            }
        }

        private void Button2_clicked(object sender, RoutedEventArgs e)
        {
            if ((string)Button2.Content == correctFlag) // this does not activate because of the issue mentioned above
            {
                MessageBox.Show("good job");
            }
        }

        private void Button3_clicked(object sender, RoutedEventArgs e)
        {
            if ((string)Button3.Content == correctFlag) // this does not activate because of the issue mentioned above
            {
                MessageBox.Show("good job");
            }
        }

        private void Button4_clicked(object sender, RoutedEventArgs e)
        {
            if ((string)Button4.Content == correctFlag) // this does not activate because of the issue mentioned above
            {
                MessageBox.Show("good job");
            }
        }

1 Ответов

Рейтинг:
4

CHill60

Вы определили локальную переменную correctflag с этой строкой в

String correctFlag = flags[num.Next(0, flags.Length)];
в public void RandomImage().

Это не то же самое, что присвоение значения
private string correctFlag { get; set; }
Узнавать Область действия переменных в языке Си#[^].

Измените эту первую строку на
correctFlag = flags[num.Next(0, flags.Length)];
и пока вы об этом говорите измените объявление для функции случайной кнопки на
public void RandomButttons(string flag2, string flag3, string flag4)


QuantumNova

большое вам спасибо, это мне очень помогло :)