• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Tworzenie nowej sceny

VPS Starter Arubacloud
0 głosów
145 wizyt
pytanie zadane 18 lutego 2017 w C# przez Yoshua Nowicjusz (200 p.)
Witam, dopiero uczę się programowania w C# i jestem w kropce, mianowicie chcę napisać kod aby poprzez kliknięcie na dany rectangle otworzyła się nowa scena ( coś jakby menu ) lecz nie mam najmniejszego pojęcia jak to zrobić, czytałem trochę o funkcji enum ale nie zbyt wiele mi to dało, mógłby ktoś z was mi lekko podpowiedzieć jak można coś takiego stworzyć ?

1 odpowiedź

0 głosów
odpowiedź 19 lutego 2017 przez Bartłomiej Łaski Mądrala (5,100 p.)
Technolgia WPF czy Form?

Pozdrawiam :)
komentarz 19 lutego 2017 przez Bartłomiej Łaski Mądrala (5,100 p.)

Jeżeli chodzi o WPF to pokaże Ci najprostrzy sposob, ale tak jak jest to tu pokazane, nikt raczej ni uzywa, poniewaz robi sie to poprzed userControle i MVVM. Niżej napisze jak to zrobic przez userControle i jak eventy wywolac.

 

PLIK XAML

<Window x:Class="WpfApplication1.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:WpfApplication1"
        mc:Ignorable="d"
        Title="Tutorial" Height="350" Width="525">
    <Grid>
        <Grid>
            <Rectangle x:Name="Retangle" Width="150" Height="150" Fill="Red" MouseDown="Retangle_MouseDown" Visibility="Visible"/>
        </Grid>

        <Grid x:Name="pnl" Visibility="Collapsed">
            <StackPanel>
                <Button Height="100" Width="200">
                    Button1
                </Button>
                <Button Height="100" Width="200">
                    Button2
                </Button>
                <Button Height="100" Width="200" Click="Button_Click">
                    Exit
                </Button>
            </StackPanel>
        </Grid>
    </Grid>
</Window>

PLIK XAML.CS

using System.Windows;
using System.Windows.Input;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Retangle.AddHandler(FrameworkElement.MouseDownEvent, new MouseButtonEventHandler(Retangle_MouseDown), true);
        }

        private void Retangle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            openMenu();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            closeMenu();
        }

        private void openMenu()
        {
            pnl.Visibility = Visibility.Visible;
            Retangle.Visibility = Visibility.Collapsed;
        }

        private void closeMenu()
        {
            pnl.Visibility = Visibility.Collapsed;
            Retangle.Visibility = Visibility.Visible;
        }
    }
}

 

komentarz 19 lutego 2017 przez Bartłomiej Łaski Mądrala (5,100 p.)

Tutaj masz rozwiazanie z usercontrolami i eventami :). Masz mniej wiecej pokazane jak działaja enumy w takich przypadkach :)

 

MainWindow XAML
 

<Window x:Class="WpfApplication1.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:WpfApplication1"
        mc:Ignorable="d"
        Title="Tutorial" Height="350" Width="525">
    <Grid>
        <Grid x:Name="pnlRetanle" Visibility="Visible">
            <local:retangle MenuButtonClick="retangle_MenuButtonClick"/>
        </Grid>
        <Grid x:Name="pnlMenu" Visibility="Collapsed">
            <local:menu MenuButtonClick="menu_MenuButtonClick"/>
        </Grid>
    </Grid>
</Window>


MainWindow.XAML.CS

using System.Windows;
using System.Windows.Input;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Retangle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            openMenu();
        }

        private void openMenu()
        {
            pnlRetanle.Visibility = Visibility.Collapsed;
            pnlMenu.Visibility = Visibility.Visible;
        }

        private void closeMenu()
        {
            pnlRetanle.Visibility = Visibility.Visible;
            pnlMenu.Visibility = Visibility.Collapsed;
        }

        private void retangle_MenuButtonClick(object sender, System.EventArgs e)
        {
            openMenu();
        }

        private void menu_MenuButtonClick(object sender, menu.Buttons e)
        {
            if(e == menu.Buttons.exit)
                closeMenu();
        }
    }
}


Retagnle XAML

<UserControl x:Class="WpfApplication1.retangle"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Rectangle x:Name="Retangle" Width="150" Height="150" Fill="Red" MouseDown="Retangle_MouseDown" Visibility="Visible"/>
    </Grid>
</UserControl>


Retangle XAML CS
 

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 WpfApplication1
{
    /// <summary>
    /// Interaction logic for retangle.xaml
    /// </summary>
    public partial class retangle : UserControl
    {
        public delegate void MenuButtonClickEventHandler(object sender, EventArgs e);
        public event MenuButtonClickEventHandler MenuButtonClick;


        public retangle()
        {
            InitializeComponent();
        }

        private void Retangle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            MenuButtonClick?.Invoke(this, new EventArgs());
        }
    }
}


MENU XAML
 

<UserControl x:Class="WpfApplication1.menu"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <StackPanel>
            <Button Height="100" Width="200">
                Button1
            </Button>
            <Button Height="100" Width="200">
                Button2
            </Button>
            <Button Height="100" Width="200" Click="Button_Click">
                Exit
            </Button>
        </StackPanel>
    </Grid>
</UserControl>

MENU XAML CS
 

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 WpfApplication1
{
    /// <summary>
    /// Interaction logic for menu.xaml
    /// </summary>
    public partial class menu : UserControl
    {
        public delegate void MenuButtonClickEventHandler(object sender, Buttons e);
        public event MenuButtonClickEventHandler MenuButtonClick;

        public enum Buttons
        {
            button1,
            button2,
            exit
        }
        public menu()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MenuButtonClick?.Invoke(this, Buttons.exit);
        }
    }
}

 

Podobne pytania

0 głosów
2 odpowiedzi 453 wizyt
0 głosów
2 odpowiedzi 232 wizyt
pytanie zadane 21 czerwca 2017 w C# przez Yoshua Nowicjusz (200 p.)
0 głosów
1 odpowiedź 155 wizyt
pytanie zadane 14 kwietnia 2018 w C# przez Destroy3243 Nowicjusz (150 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...