Avatar billede fc_kongen Nybegynder
23. december 2008 - 13:23 Der er 5 kommentarer

wpf opdatering af gui

Hej

Er der nogen der kan forklare mig hvordan man opdatere ens GUI. Skal der en event til hver gang? Hvis ja hvad skal man så gøre hvis man ikke har nogen event. Men man bare vil kalde en metode til at gøre det? Kan man kalde Window_Loaded(object sender, RoutedEventArgs e) til at opdatere sin skærm. Igen her hvad gør man hvis man ikke har nogen event.

Har det problem at når jeg er i en anden klasse end den hvor gui delen er, så kan jeg ikke få lov til at opdatere min skærm. Vil gerne kunne kalde min ene metode og så skulle den gerne opdatere min skærm.
Avatar billede Syska Mester
23. december 2008 - 17:05 #1
Kan du ikke sende en reference af din "gui" klasse med til den klasse som skal lave de ændringer på din gui ?
Avatar billede fc_kongen Nybegynder
26. december 2008 - 16:26 #2
Det kan du tro jeg kan.. her er den :)

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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 Testannimation
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        private String player = "xSpiller";
        private Boolean gameOver;
        MoveAndCheckForWinner move = MoveAndCheckForWinner.getInstance();
        private Button[] buttons;
        private static Window1 instance = null;
       

        public Window1()
        {
            InitializeComponent();
            buttons = new Button[9] { cell0, cell1, cell2, cell3, cell4, cell5, cell6, cell7, cell8 };
        }
       
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
        }

        // singleton
        public static Window1 getInstance() {
            if (null == instance) {
                instance = new Window1();
            }
            return instance;
        }

        public void bu_save(object sender, RoutedEventArgs e) {

            SerializeToFile serialize = new SerializeToFile();
        }
        private void bu_load(object sender, RoutedEventArgs e) {

            DeserializeFromFile deserialize = new DeserializeFromFile();
        }

        private void resetGame() {

            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    move.setTakenMovexSpiller(j, i);
                    move.setTakenMoveoSpiller(j, i);
                }
            }

            cell0.Content = "";
            cell1.Content = "";
            cell2.Content = "";
            cell3.Content = "";
            cell4.Content = "";
            cell5.Content = "";
            cell6.Content = "";
            cell7.Content = "";
            cell8.Content = "";

            cell0.IsEnabled = true;
            cell1.IsEnabled = true;
            cell2.IsEnabled = true;
            cell3.IsEnabled = true;
            cell4.IsEnabled = true;
            cell5.IsEnabled = true;
            cell6.IsEnabled = true;
            cell7.IsEnabled = true;
            cell8.IsEnabled = true;
            cell0.IsEnabled = true;
        }

        public void setMoves(String celle, String moves) {
           
            for (int i = 0; i < buttons.Length; i++ ) {
                Button b = buttons[i];

                if(celle.Equals(b.Name)) {
                    Console.WriteLine("cell" + celle);
                    Console.WriteLine("moves " + moves);

                    switch (celle) {

                        case "cell0":
                            cell0.Content = moves;
                            move.setSpiller(moves+"Spiller", 0, 0);
                            cell0.IsEnabled = false;
                            break;

                        case "cell1":
                            cell1.Content = moves;
                            move.setSpiller(moves + "Spiller", 0, 1);
                            cell1.IsEnabled = false;
                            Console.WriteLine("cell1 " + b.Name);
                            break;

                        case "cell2":
                            cell2.Content = moves;
                            move.setSpiller(moves + "Spiller", 0, 2);
                            cell2.IsEnabled = false;
                            Console.WriteLine("cell2 " + b.Name);
                            break;

                        case "cell3":
                            cell3.Content = moves;
                            move.setSpiller(moves + "Spiller", 1, 0);
                            cell3.IsEnabled = false;
                            break;

                        case "cell4":
                            cell4.Content = moves;
                            move.setSpiller(moves + "Spiller", 1, 1);
                            cell4.IsEnabled = false;
                            break;

                        case "cell5":
                            cell5.Content = moves;
                            move.setSpiller(moves + "Spiller", 1, 2);
                            cell5.IsEnabled = false;
                            Console.WriteLine("cell5 " + b.Name);
                            break;

                        case "cell6":
                            cell6.Content = moves;
                            move.setSpiller(moves + "Spiller", 2, 0);
                            cell6.IsEnabled = false;
                            break;

                        case "cell7":
                            cell7.Content = moves;
                            move.setSpiller(moves + "Spiller", 1, 2);
                            cell7.IsEnabled = false;
                            break;

                        case "cell8":
                            cell8.Content = moves;
                            move.setSpiller(moves + "Spiller", 2, 2);
                            cell8.IsEnabled = false;
                            break;

                        default:
                            break;
                    }
                }
            }
        }
... Der er noget mere kode men det er bare clicklisteners til knapperne. Her er klassen som kalder metoden i min gui klasse. Hensigten er at når setMoves er kaldt så skulle den opdatere gui'en

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace Testannimation {
    class DeserializeFromFile {
        private String position;
        private Window1 window = Window1.getInstance();
        private MoveAndCheckForWinner move = MoveAndCheckForWinner.getInstance();
        int i;
        int j;
        public DeserializeFromFile() {

            SerializeData data = new SerializeData();
            try {

                Stream stream = File.Open("SavedGame.osl", FileMode.Open);
                BinaryFormatter binary = new BinaryFormatter();

                Console.WriteLine("Stuff works");
                data = (SerializeData)binary.Deserialize(stream);
                stream.Close();
                Console.WriteLine("tal " + data.tal);
                Console.WriteLine("Tekst " + data.tekst);
                Console.ReadLine();
            }
            catch (FileNotFoundException e) {
                Console.WriteLine("fil ikke fundet" + e.StackTrace);
            }

            Window1 window = new Window1();
            for (i = 0; i < 3; i++) {
                for (j = 0; j < 3; j++) {
                    if (SerializeData.xSpiller[i, j] == true) {
                        Console.WriteLine("how many times" + SerializeData.xSpiller[i, j]);
                        setPosition((position = "" + i + "," + j), "x");                   
                    }
                    if (SerializeData.oSpiller[i, j] == true) {
                        Console.WriteLine("how many times o" + SerializeData.oSpiller[i, j]);
                        setPosition((position = "" + i + "," + j), "o");
                    }
                }
            }
        }

        public void setPosition(String position, String player) {
            String movesTaken = "setTakenMove" + player + "Spiller";

            switch(position) {
               
                case "0,0":
                    window.setMoves("cell0",player);                 
                    if (movesTaken.Equals("setTakenMovexSpiller")) {
                        move.setTakenMovexSpiller(i, j);
                    }
                    else {
                        move.setTakenMoveoSpiller(i, j);
                    }
                break;

                case "0,1":
                    window.setMoves("cell1", player);
                    if (movesTaken.Equals("setTakenMovexSpiller")) {
                        move.setTakenMovexSpiller(i, j);
                    }
                    else {
                        move.setTakenMoveoSpiller(i, j);
                    }
                break;

                case "0,2":
                    window.setMoves("cell2", player);
                    if (movesTaken.Equals("setTakenMovexSpiller")) {
                        move.setTakenMovexSpiller(i, j);
                    }
                    else {
                        move.setTakenMoveoSpiller(i, j);
                    }
                break;

                case "1,0":
                    window.setMoves("cell3", player);
                    if (movesTaken.Equals("setTakenMovexSpiller")) {
                        move.setTakenMovexSpiller(i, j);
                    }
                    else {
                        move.setTakenMoveoSpiller(i, j);
                    }
                break;

                case "1,1":
                    window.setMoves("cell4", player);
                    if (movesTaken.Equals("setTakenMovexSpiller")) {
                        move.setTakenMovexSpiller(i, j);
                    }
                    else {
                        move.setTakenMoveoSpiller(i, j);
                    }
                break;

                case "1,2":
                    window.setMoves("cell5", player);
                    if (movesTaken.Equals("setTakenMovexSpiller")) {
                        move.setTakenMovexSpiller(i, j);
                    }
                    else {
                        move.setTakenMoveoSpiller(i, j);
                    }
                break;

                case "2,0":
                    window.setMoves("cell6", player);
                    if (movesTaken.Equals("setTakenMovexSpiller")) {
                        move.setTakenMovexSpiller(i, j);
                    }
                    else {
                        move.setTakenMoveoSpiller(i, j);
                    }
                break;

                case "2,1":
                    window.setMoves("cell7", player);
                    if (movesTaken.Equals("setTakenMovexSpiller")) {
                        move.setTakenMovexSpiller(i, j);
                    }
                    else {
                        move.setTakenMoveoSpiller(i, j);
                    }
                break;

                case "2,2":
                    window.setMoves("cell8", player);
                    if (movesTaken.Equals("setTakenMovexSpiller")) {
                        move.setTakenMovexSpiller(i, j);
                    }
                    else {
                        move.setTakenMoveoSpiller(i, j);
                    }
                break;
               
                default:
                break;
            }
        }
    }
}

håber du kan se hvad pokker jeg gør galt. Jeg får ingen kompiler fejl:)
Avatar billede Syska Mester
26. december 2008 - 23:55 #3
ja, jo ... kan ikke lige se helt hvad der går galt ...

Men virker det hvis du laver det hele i din Window1 klasse og ikke bruger singleton ?

// ouT
Avatar billede fc_kongen Nybegynder
28. december 2008 - 19:09 #4
f.eks. min resetGame metode virker fint. Synes derfor det er underligt at den anden metode ikke virker. Men der behøver ikke blive sendt en event for at opdatere skærmen?
Avatar billede Syska Mester
31. december 2008 - 02:43 #5
Ville jeg bestemt ikke mene hvis det er de rigtige referencer du piller ved ... og ikke nogen nye du får oprettet ... og så på den måde retter i det forkerte.

// ouT
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester