728x90
반응형

디스크의 남은 용량을 나타내는 프로그램 코드입니다.

 

MainWindow.xaml

 

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

        mc:Ignorable="d"

        Title="MainWindow" Height="450" Width="800">

    <StackPanel x:Name="stackPanel">

        <Label Content="전체 하드디스크 용량" HorizontalAlignment="Center" VerticalAlignment="Top"/>

        <Button x:Name="calButton" Content="계산하기" Width="200" Margin="0,0,0,20" Click="calButton_Click"/>

    </StackPanel>

</Window>

 

 

 

MainWindow.xaml.cs

 

using System;

using System.IO;

using System.Windows;

using System.Windows.Controls;

 

namespace WpfApp

{

    /// <summary>

    /// MainWindow.xaml에 대한 상호 작용 논리

    /// </summary>

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

        }

 

        /// <summary>

        /// 계산하기 버튼 클릭 이벤트입니다.

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void calButton_Click(object sender, RoutedEventArgs e)

        {

            DriveInfo[] driveInfos = DriveInfo.GetDrives();

 

            foreach (DriveInfo driveInfo in driveInfos)

            {

                if (driveInfo.DriveType == DriveType.Fixed)

                {

                    ProgressBar progressBar = new ProgressBar() { HorizontalAlignment = HorizontalAlignment.Center };

 

                    // 전체 용량을 계산합니다.

                    progressBar.Maximum = Convert.ToInt32(driveInfo.TotalSize / 1024 / 1024);

 

                    // 남은 용량을 계산합니다. (MB)

                    progressBar.Value = Convert.ToInt32(driveInfo.TotalSize / 1024 / 1024) - Convert.ToInt32(driveInfo.AvailableFreeSpace / 1024 / 1024);

 

                    progressBar.Width = 200;

 

                    progressBar.Height = 20;

 

                    this.stackPanel.Children.Add(progressBar);

 

                    Label label = new Label() { HorizontalAlignment = HorizontalAlignment.Center };

 

                    label.Content = driveInfo.Name + " " + (driveInfo.TotalFreeSpace / 1024 / 1024) + "MB Free";

 

                    this.stackPanel.Children.Add(label);

                }

            }

        }

    }

}

 

 

계산하기 버튼을 클릭하면 디스크 남은 용량이 나열됩니다.

 

 

 

728x90
반응형
728x90
반응형

DrawingContext 의 영역을 벗어 나지 않도록 하기 위한 코드로

어떤 도형을 정의한 경우 그 도형을 벗어나서 글자들이 그려지는 것을 막는 코드입니다.

(dc : DrawingContext)

 

 

dc.PushClip(new RectangleGeometry(new Rect(new Point(0, 0), RenderSize)));

 

 

 

* 처리하지 않은 경우

 

* 처리한 경우

 

 

 

728x90
반응형
728x90
반응형

어떤 이유로 인해 오류 발생시 어플리케이션이 종료되는

현상을 막기 위한 코드입니다.

 

 

using System.Windows;

 

namespace WpfApp1

{

    /// <summary>

    /// App.xaml에 대한 상호 작용 논리

    /// </summary>

    public partial class App : Application

    {

        public App()

        {

            this.Dispatcher.UnhandledException       += this.Dispatcher_UnhandledException;

            this.Dispatcher.UnhandledExceptionFilter += this.Dispatcher_UnhandledExceptionFilter;

        }

 

        private void Dispatcher_UnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)

        {

            e.Handled = true;

        }

 

        private void Dispatcher_UnhandledExceptionFilter(object sender, System.Windows.Threading.DispatcherUnhandledExceptionFilterEventArgs e)

        {

            e.RequestCatch = true;

        }

    }

}

 

728x90
반응형
728x90
반응형

Panel 안의 모든 Button 에 같은 이벤트를 적용하는 방법입니다.

우선 각각 버튼에 이벤트를 주는 경우는 아래와 같습니다.

 

        public MainWindow()

        {

            InitializeComponent();

 

            StackPanel stack = new StackPanel();

            Content = stack;

            Random rand = new Random();

            for (int i = 0; i < 10; i++)

            {

                Button btn = new Button();

                btn.Name = ((char)('A' + i)).ToString();

                btn.FontSize += rand.Next(10);

                btn.Content = "Button " + btn.Name + " says 'Click me'";

                btn.Click += ButtonOnClick;

                stack.Children.Add(btn);

            }

        }

 

        void ButtonOnClick(object sender, RoutedEventArgs args)

        {

            Button btn = args.Source as Button;

            MessageBox.Show("Button " + btn.Name + " has been clicked", "Button Click");

        }

 

AddHandler 와 RoutedEventHandler 를 사용해 아래 처럼 하면 위 처리한 방식과 같은 처리가 가능합니다.

* 모든 버튼의 ClickEvent 를 하나의 이벤트(ButtonOnClick)로 연결시켜줍니다.

 

        public MainWindow()

        {

            InitializeComponent();

 

            StackPanel stack = new StackPanel();

            Content = stack;

            Random rand = new Random();

            for (int i = 0; i < 10; i++)

            {

                Button btn = new Button();

                btn.Name = ((char)('A' + i)).ToString();

                btn.FontSize += rand.Next(10);

                btn.Content = "Button " + btn.Name + " says 'Click me'";

                stack.Children.Add(btn);

            }

 

            stack.AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonOnClick));

        }

 

        void ButtonOnClick(object sender, RoutedEventArgs args)

        {

            Button btn = args.Source as Button;

            MessageBox.Show("Button " + btn.Name + " has been clicked", "Button Click");

        }

 

 

728x90
반응형
728x90
반응형

프로젝트에 특정 이미지 파일을 추가한 후

아래 처럼 사용하면 접근할수 있습니다.

 

* 이미지 파일명 (keisoft_textlogo.jpg)

 

        public MainWindow()

        {

            InitializeComponent();

 

            Title = "Show My Face";

            Uri uri = new Uri("pack://application:,,,/keisoft_textlogo.jpg");

            BitmapImage bitmap = new BitmapImage(uri);

            Image img = new Image();

            img.Source = bitmap;

            img.Stretch = Stretch.Fill;

            Content = img;

        }

 

 

728x90
반응형

+ Recent posts