永久保存在运行时完成的操作

时间:2017-07-16 12:21:37

标签: c# wpf

我的程序正在运行并且正在执行它应该执行的操作,但它当然不会保存在运行时创建的内容。我怎样才能做到这一点?我可以将Gamebutton方法放入文件中并在每次加载程序时调用该文件吗?我该怎么做?

xaml.cs

public void Gamebutton()
    {           
        // Button to start a Game
        DockPanel panel = new DockPanel();
        main_panel.Children.Add(panel);

        Button Gamebutton = new Button();
        {
            Gamebutton.Height = 50;
            Gamebutton.Width = 500;
            Gamebutton.Content = btname.Text;
            Gamebutton.FontSize = 24;
            Gamebutton.BorderThickness = new Thickness(0);
            Gamebutton.Margin = new Thickness(10, 10, 0, 10);
            Gamebutton.Click += Run_Game;
            Gamebutton.Tag = btpath.Text;
            panel.Children.Add(Gamebutton);              
        }

        // del Gamebutton
        Button Delbutton = new Button();
        {
            Delbutton.Height = 50;
            Delbutton.Content = "X";
            Delbutton.FontSize = 24;
            Delbutton.BorderThickness = new Thickness(0);
            Delbutton.Margin = new Thickness(0, 10, 10, 10);
            Delbutton.Click += Del_Gamebutton;
            panel.Children.Add(Delbutton);
        }

        // Contextmenu for Gamebutton
        ContextMenu = new ContextMenu();
        {
            Gamebutton.ContextMenu = ContextMenu;

            MenuItem rename = new MenuItem();
            rename.Header = "Rename";
            rename.Click += Rename;
            ContextMenu.Items.Add(rename);

            MenuItem Pathd = new MenuItem();
            Pathd.Header = "Path D:";
            Pathd.Click += Pathdtotag;
            ContextMenu.Items.Add(Pathd);

            MenuItem Pathe = new MenuItem();
            Pathe.Header = "Path E:";
            Pathe.Click += Pathetotag;
            ContextMenu.Items.Add(Pathe);

            MenuItem del = new MenuItem();
            del.Header = "Delete";
            del.Click += Del_Gamebutton;
            ContextMenu.Items.Add(del);
        }

        // redefinds Gamepath E:\ via Contextmenu
        void Pathetotag(object sender, EventArgs e)
        {
            OpenFileDialog Pathpick = new OpenFileDialog();
            Pathpick.InitialDirectory = @"E:\Games";
            Pathpick.ShowDialog();
            Gamebutton.Tag = Pathpick.FileName;
        }

        // redefinds Gamepath D:\ via Contextmenu
        void Pathdtotag(object sender, EventArgs e)
        {
            OpenFileDialog Pathpick = new OpenFileDialog();
            Pathpick.InitialDirectory = @"D:\Games";
            Pathpick.ShowDialog();
            Gamebutton.Tag = Pathpick.FileName;
        }

        // Renaming Window in Contextmenu
        void Rename(object sender, EventArgs e)
        {
            Window Renamewindow = new Window();
            Renamewindow.Name = "Test";
            Renamewindow.Width = 250;
            Renamewindow.Height = 120;
            Renamewindow.Title = "Rename";

            Grid renamegrid = new Grid();
            Renamewindow.Content = renamegrid;

            StackPanel stckpnl = new StackPanel();
            renamegrid.Children.Add(stckpnl);

            TextBox renametxtbox = new TextBox();
            renametxtbox.Height = 20;
            renametxtbox.Width = 200;
            renametxtbox.HorizontalAlignment = HorizontalAlignment.Center;
            renametxtbox.Margin = new Thickness(10, 10, 10, 10);
            renametxtbox.KeyDown += Renameevent;                
            stckpnl.Children.Add(renametxtbox);

            Renamewindow.Show();
            renametxtbox.Focus();
        }            

        // Renames Gamebutton Content via Renaming Window
        void Renameevent(object sender, KeyEventArgs e)
        {
            string renametxt = ((sender as TextBox).Text as String);
            if (e.Key == Key.Return)
            {
                Gamebutton.Content = renametxt;
            }
        }

        // Run Game
        void Run_Game(object sender, EventArgs e)
        {
            string Path = ((sender as Button).Tag as String);
            Process Gamestart = new Process();
            {
                Gamestart.StartInfo.FileName = Path;
                if (Path == "") // in case no Path is selected, programm doesnt crash
                {
                    MessageBox.Show("Button has no Path");
                }
                else
                {
                    Gamestart.Start();
                }
            }
        } 

        // del Gamebutton via Contextmenu
        void Del_Gamebutton(object sender, EventArgs e)
        {
            panel.Children.Remove(Gamebutton);
            panel.Children.Remove(Delbutton);
        }
    }

XAML

<Window x:Class="Games_Loader.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:Games_Loader"
    mc:Ignorable="d"
    Title="Games Loader" Height="600" Width="800" ResizeMode="NoResize">
<Grid>        
    <StackPanel x:Name="menu_panel" HorizontalAlignment="Left" Width="200" Background="LightGray">
        <TextBlock>Gamename:</TextBlock>
        <TextBox x:Name="btname" Margin="10,10,10,10" KeyDown="Btname_Enter"/>
        <TextBlock>Path:</TextBlock>
        <TextBox x:Name="btpath" Margin="10,10,10,10"/>
            <DockPanel>
                <Button Height="40" Width="85" x:Name="btpathclickerd" Click="Btpath_Click_d" Margin="10,10,0,0">Add Path D:\</Button>
                <Button Height="40" Width="85" x:Name="btpathclickere" Click="Btpath_Click_e" Margin="0,10,0,0">Add Path E:\</Button>
            </DockPanel>
        <Button x:Name="add_game" Height="40" Margin="5,50,5,0" Click="Add_game_Click">Add Game</Button>
    </StackPanel>
    <ScrollViewer Margin="200,0,0,0" VerticalScrollBarVisibility="Auto" Grid.ColumnSpan="2">
        <StackPanel x:Name="main_panel" Background="Gray"/>
    </ScrollViewer>
</Grid>

1 个答案:

答案 0 :(得分:1)

将您的设置保存到某种对象,然后使用Json序列化并在app退出时将其写入文件。在应用启动时加载和反序列化设置。