Как я могу изменить содержимое метки при нажатии кнопки в другом окне?

#c#

#c#

Вопрос:

Это первое, что я когда-либо делал, связанное с C #, но в прошлом я изучал lua и python. Я хотел создать приложение для игры в бинго на случай, если придут друзья, и я подумал, что попробую. В принципе, у меня есть 2 окна, 1 для вызывающего абонента bingo и одно, которое я могу отобразить на экране, чтобы игроки могли видеть. В окне вызывающего абонента bingo есть все элементы управления, но я хочу иметь возможность что-то менять в окне игроков. У меня есть кнопка, и когда я нажимаю на нее, я хочу, чтобы она делала видимым изображение и изменяла текст, говорящий «У нас есть победитель». Однако я не могу найти способ изменить вещи в другом окне: (

Вот мой код, а также несколько картинок.

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

        Window window = new Window1();
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            window.Show();
            PlayBingo.Visibility = Visibility.Hidden;
            DeclareWinner.Visibility = Visibility.Visible;
            RollNumber.Visibility = Visibility.Visible;
        }

        private void Declare_Winner(object sender, RoutedEventArgs e)
        {
            
        }

        private void Roll_Number(object sender, RoutedEventArgs e)
        {

        }
    }
  

Изображение макета

Редактировать

         public string BingoNumberChange(string bingonumber)
        {
            BingoNo.Content = bingonumber;
            return bingonumber;
        }
  

Я создал эту функцию в своем скрипте window1. Однако я не могу вызвать его из скрипта MainWindow???

Ответ №1:

создайте общедоступный метод в классе Window1, который принимает новый текст, и вызовите этот метод из главного окна. Вы можете сделать это для класса с несколькими окнами с интерфейсом

 public class Window1 : Window
{
   // skip all other code
   public void SetLabelText(string str)
   {
       label1.Content= str;
   }
}
  

Вызовите этот метод из главного окна нажатием кнопки

 Window1 newWindowobj = new Window1():
newWindowobj.SetLabel("new text");
newWindowobj.Show();
  

Другой подход

IContentUpdatable.cs

 public interface IContentUpdatable
{
    void UpdateContent(string content);
}
  

Код Window1

 public partial class Window1 : Window, IContentUpdatable
{
    public Window1()
    {
        InitializeComponent();
    }

    public void UpdateContent(string content)
    {
        lblCaption.Content = content;
    }
}
  

Код MainWindow

  Window1 window1 = new Window1();
 private void btnClick_Click(object sender, RoutedEventArgs e)
 {
     ((IContentUpdatable)window1).UpdateContent("Passed from Main Window");
     window1.Show();
 }
  

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

1. Как создать функцию?

2. Я опубликовал свою функцию выше. Вы можете понять, почему это не работает?

3. Вы не вызываетесь «BingoNumberChange» из события нажатия кнопки Mainwindow.