레이블이 #HelloWorld인 게시물을 표시합니다. 모든 게시물 표시
레이블이 #HelloWorld인 게시물을 표시합니다. 모든 게시물 표시

2021년 11월 6일 토요일

WPF HelloWorld를 만들어 보자.

간단히 WPF HelloWorld를 만들어 보자.


  1. Visual Studio 2017에서 Visual C# >> WPF 앱(.NET Framework)을 선택 후 프로젝트명은 WpfApp2으로 하자.

6bHTB-xCB3WP67GZPWPybFrru9P7bAp4ZR1HksRl


  1. MainWindow.xaml을 더블클릭하여 XAML 디자인 화면을 열어서 Label, TextBox, Button 컨트롤을 그림처럼 배치하자. (TextBox : txtName, Burron : btnSayHello)

OO-efbSrMK5edb0FZY4kmU2CuxN8eAF1Zc5s50P2

  1. 컨트롤을 올려서 완성된 MainWindow.xaml 코드

<Window x:Class="WpfApp2.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:WpfApp2"

        mc:Ignorable="d"

        Title="MainWindow" Height="181.2" Width="503.4">

    <Grid Margin="0,0,0.4,1.8">

        <Label x:Name="label" Content="이름을 입력하세요." HorizontalAlignment="Left" Margin="64,55,0,0" VerticalAlignment="Top" Height="34" Width="135" FontSize="14"/>

        <TextBox x:Name="txtName" HorizontalAlignment="Left" Height="34" Margin="204,55,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>

        <Button x:Name="btnSayHello" Content="Say Hello!" HorizontalAlignment="Left" Margin="329,55,0,0" VerticalAlignment="Top" Width="75" Height="34" Click="btnSayHello_Click"/>

    </Grid>

</Window>


  1. 버튼을 클릭하고 속성항에서 번개표시를 누르면 이벤트들이 나타나는데 Click 이벤트를 더블클릭 하여 이벤트 핸들러를 작성하자.

qtNNQj2dYsCtY-dgnFLPZYc4zlmTaq5-UUY1KYk4


private void btnSayHello_Click(object sender, RoutedEventArgs e)

{

    MessageBox.Show("Hello " + txtName.Text); 

}


  1. 완성된 MainWindow.xaml.cs

using System.Windows;

 

namespace WpfApp2

{

public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

        }

 

        private void btnSayHello_Click(object sender, RoutedEventArgs e)

        {

            MessageBox.Show("Hello " + txtName.Text);

        }

    }

}


  1. 실행화면(Ctrl + F5)

UEdWgJrQWv0TmDC_57wpKxuE9-LAlsAiYtpCvOue

1.2 HelloWorld XAML기반 WPF 프로그램 작동 원리


  • WPF 프로젝트를 생성하면 App.xaml, MainWindow.xaml 두개의 xaml 파일이 생성되는데 App.xaml이 App 라는 클래스로 메인메소드(Main)를 가지면서 자동생성되고 이 메인에서 MainWindow를 StartupUri로 지정해서 MainWindow가 처음 시작된다.

  • App.xaml이 엔트리 포인트이며 앞에서 작성한 HelloWorld 프로젝트에서 App.g.cs 파일로 변환되어 생성된다. (App.g.i.cs 파일도 생성되는데 임시 파일로 보면 된다.)

  • [App.g.cs]

#pragma checksum "..\..\App.xaml" "{406ea660-64cf-4c82-b6f0-42d48172a799}" "72192FBCE1E41E0B66442FD984320E84"

//------------------------------------------------------------------------------

// <auto-generated>

//     이 코드는 도구를 사용하여 생성되었습니다.

//     런타임 버전:4.0.30319.42000

//

//     파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면

//     이러한 변경 내용이 손실됩니다.

// </auto-generated>

//------------------------------------------------------------------------------

 

using System;

using System.Diagnostics;

using System.Windows;

using System.Windows.Automation;

using System.Windows.Controls;

using System.Windows.Controls.Primitives;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Ink;

using System.Windows.Input;

using System.Windows.Markup;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Media.Effects;

using System.Windows.Media.Imaging;

using System.Windows.Media.Media3D;

using System.Windows.Media.TextFormatting;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Windows.Shell;

using WpfApp2;

 

 

namespace WpfApp2 {

    

    

    /// <summary>

    /// App

    /// </summary>

    public partial class App : System.Windows.Application {

        

        /// <summary>

        /// InitializeComponent

        /// </summary>

        [System.Diagnostics.DebuggerNonUserCodeAttribute()]

        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]

        public void InitializeComponent() {

            

            #line 5 "..\..\App.xaml"

            this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);

            

            #line default

            #line hidden

        }

        

        /// <summary>

        /// Application Entry Point.

        /// </summary>

        [System.STAThreadAttribute()]

        [System.Diagnostics.DebuggerNonUserCodeAttribute()]

        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]

        public static void Main() {

            WpfApp2.App app = new WpfApp2.App();

            app.InitializeComponent();

            app.Run();

        }

    }

}


  • App.xaml의 코드 비하인드 파일이 App.xaml.cs로 하나의 App라는 이름의 부분 클래스로 생성된다.

  • 만약 App.xaml StartupUri을 삭제하면 App.xaml.cs 소스코드에서 아래처럼 OnStartUp 메소드를 오버라이드 하면 된다.

public partial class App : Application

{

    protected override void OnStartup(StartupEventArgs e)

    {

        base.OnStartup(e);

        // here you take control

    MainWindow w = new MainWindow();

    w.Show();

    }

}


  • 물론 App.xaml, App.xaml.cs 파일을 모두 삭제하고 새로운 메인을 만들어도 된다.


5zSqpHQHJ9DVFiAzOk4Ry3yOMwtVv9fKrcBTK3RU


[MyMain.cs]

using System;

using System.Windows;

 

namespace WpfApp2

{

    class MyMain

    {

        [STAThread]

        public static void Main()

        {

            Application app = new Application();

            app.Run(new MainWindow());

        }

    } 

}


  • 만약 응용프로그램에서 Main 메소드를 가지는 클래스가 여러 개 라면 프로젝트의 속성에서 시작 클래스를 지정할 수도 있다.

diouDaAcEABvlOPu0J8bzHyTho1KDm-toy5ukUvX

 

#WPF, #HelloWorld 

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...