C# WPF шпоргалка

  1. C# WPF сериализация XmlSerializer класс
  2. C# WPF Webbrowser примеры кода

подключения

Показать »

using System.IO;//работа с файлами
using System.Text.RegularExpressions;//подключаем регулярные выражения
using System.Collections;//содержит ArrayList
using System.Runtime.InteropServices;//для подключения длл

Вывод сообщения MessageBox.Show

Показать »

private void button_Click(object sender, RoutedEventArgs e)
 {
      string caption = "caption";
      string text = "This is text";
      MessageBoxButton button= MessageBoxButton.YesNoCancel;//добавляем кнопку
      MessageBoxImage icon = MessageBoxImage.Warning;//предупреждение
      MessageBoxResult res= MessageBox.Show(text, caption, button, icon);
      if(res==MessageBoxResult.Yes)
      {
           MessageBox.Show("Yes");
      }
      else if(res==MessageBoxResult.No)
      {
           MessageBox.Show("No");
      }
      else if(res==MessageBoxResult.Cancel)
      {
           MessageBox.Show("Cancel");
      }

перевод из int в string

Показать »

int n = 100;
string s = Convert.ToString(n, 10);
MessageBox.Show("n= "+s);
return;

Создание потока

Показать »

private void button_Click(object sender, RoutedEventArgs e)
        {
            System.Threading.Thread t = new System.Threading.Thread(f);
            t.IsBackground = true;//делаем чтобы поток был не фоновым
            t.Start();
            MessageBox.Show("end-button");
        }

        private void f()
        {
            //задержка
            MessageBox.Show("f-start");
            System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10));
            MessageBox.Show("f-end");
        }

Использование таймеров

Показать »

public 
int count;
System.Windows.Threading.DispatcherTimer timer;


public MainWindow()
{
     InitializeComponent();
     count = 0;
     textBox.Text = "One one one!";
}

private void button_Click(object sender, RoutedEventArgs e)
{
      //создаем таймер
      timer = new System.Windows.Threading.DispatcherTimer();
      timer.Tick += new EventHandler(f_timer);
      timer.Interval = new TimeSpan(0, 0, 1);//1 секунд
      timer.Start();//запускаем таймер
            
}

private void f_timer(object sender, EventArgs e)
{
      string s = Convert.ToString(count, 10);
      textBox.Text = s;
      count++;
      if (count == 5)
          timer.Stop();//останавливаем таймер
                
}

Перегрузить крестик чтобы при закрытии вызвалась функция

Показать »

Нам нужно при закрытии программы через крестик вызвать функцию свою собственную. Почитать за нее можно тут. Мы работаем с классом System.Windows, с его методами. Добавим событие Closing. В классе определяем функцию обработчик, вот ее код

void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
     MessageBox.Show("Closing called");
}

Теперь нам нужно сделать так называемую “подписку на события” – это общие объекты конфигурации, про нее почитать можно тут.

Назначить подписку на события мы можем в конструкторе в коде прописав следующий код в нем

public MainWindow()
{
      InitializeComponent();
      m_count = 0;
      textBox.Text = "One one one!";

     //подписка на событие Closing
     Closing += MainWindow_Closing;
}

или в самом XAML коде строчка Closing=”MainWindow_Closing”

<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="MainWindow" Height="328.873" Width="587.248"
        Closing="MainWindow_Closing"
        >

 

Общие диалоговые окна (открытие файла, сохранения и печати)

Показать »

Почитать за это можно тут.

Октрытие файла

private void button1_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
    dlg.FileName = "documetn";//по умолчанию имя файла
    dlg.DefaultExt = ".txt";//расширение файла по умолчанию
    dlg.Filter = "Text documents (.txt)|*.txt";//фильтра разширения

    //показать диалог открытия файла
    Nullable<bool> result = dlg.ShowDialog();
    if(result== true)
    {
        //Открываем документ
        string filename = dlg.FileName;
        MessageBox.Show(filename);
    }
}

Сохранение файлов

private void button1_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
    dlg.FileName = "Document";//по умолчанию имя файла
    dlg.DefaultExt = ".txt";//по умолчанию расширение файла
    dlg.Filter = "Text document (.txt)|*.txt";//фильтер расширения файла

    //показать диалог
    Nullable<bool> result = dlg.ShowDialog();
    if(result== true)
    {
        string filename = dlg.FileName;
        MessageBox.Show(filename);
    }
}

Диалоговое окно печати

private void button1_Click(object sender, RoutedEventArgs e)
{
    // конфигурировать диалог печати
    System.Windows.Controls.PrintDialog dlg = new System.Windows.Controls.PrintDialog();
    dlg.PageRangeSelection = PageRangeSelection.AllPages;
    dlg.UserPageRangeEnabled = true;

    // показать диалог печати
    Nullable<bool> result = dlg.ShowDialog();

    // процесс сохранения результатов диалогового окна
    if (result == true)
    {
        // печатать документ
    }
}

Создание модального диалогового окна

Показать »

Создаем окно WPF вот его код

 

<Window x:Class="WpfApplication1.Dialog2"
        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="Dialog2" Height="300" Width="300">
    <Grid>
        <Button x:Name="button" Content="Ok" HorizontalAlignment="Left" Margin="99,223,0,0" VerticalAlignment="Top" Width="75" IsDefault="True" Click="button_Click"/>
        <Button x:Name="button1" Content="Cancel" HorizontalAlignment="Left" Margin="194,223,0,0" VerticalAlignment="Top" Width="75" IsCancel="True"/>
        <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="30" Margin="79,90,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="181"/>

    </Grid>
</Window>

Обработчик кнопки Ок

private void button_Click(object sender, RoutedEventArgs e)
        {
            DialogResult = true;//устанавливаем возврат из ShowDialog
            Close();//закрываем окно
        }

И обработчик кнопки по которому вызывается диалог

private void button1_Click(object sender, RoutedEventArgs e)
        {
            DialogW dlg = new DialogW();
            
            //конфигурация диалог бокса
            dlg.Owner = this;//устанавливает связь с главным окном
            dlg.edit.Text = "hellow world!";

            //открываем диалог
            Nullable<bool> result=dlg.ShowDialog();
            if(result== true)
            {
                string s = dlg.edit.Text;
                MessageBox.Show("Ok s="+s);
            }
            else
            {
                MessageBox.Show("Cancel");
            }

        }

Создание таймера

Показать »

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 WpfApplication2
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public
            int m_count;//счетчик
            System.Windows.Threading.DispatcherTimer m_timer;

        public MainWindow()
        {
            InitializeComponent();
            m_count = 0;
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            //Подписка на событие
            m_timer = new System.Windows.Threading.DispatcherTimer();//инициализация таймера
            m_timer.Tick += new EventHandler(f_timer);//подписка на событие
            m_timer.Interval=new TimeSpan(0, 0, 1);//1 секунда
            m_timer.Start();//запускаем таймер
        }

        //функция таймер
        private void f_timer(object sender, EventArgs e)
        {
            textBox.Text = Convert.ToString(m_count++, 10);
            if (m_count == 10)
                m_timer.Stop();//останавливаем таймер
        }
    }
}

Создание потока

Показать »

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 WpfApplication3
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public
            int m_count;// переменная через которую мы обновляем поле
            System.Windows.Threading.DispatcherTimer m_timer;
        //создаем объект для блокировки
        private
            Object m_thisLock = new Object();

        public MainWindow()
        {
            InitializeComponent();

            m_count = 0;
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            //Создаем таймер через который будем обновлят TextBox
            m_timer = new System.Windows.Threading.DispatcherTimer();
            m_timer.Tick += new EventHandler(f_timer);//подписка на событие таймера
            m_timer.Interval = new TimeSpan(0, 0, 1);//интервал вызова таймера
            m_timer.Start();

            System.Threading.Thread t = new System.Threading.Thread(f_thread);
            t.IsBackground = true; //запрещаем поток в фоновом режиме
            t.Start();
        }

        private void f_timer(object sender, EventArgs e)
        {
            //обновляем TextBox
            textBox.Text = Convert.ToString(m_count, 10);
        }

        //функция потока
        private void f_thread()
        {
            //блокируем m_count
            lock (m_thisLock)
            {
                for (int i = 0; i < 1000; i++)
                {
                    //делаем задержку
                    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.1));

                    m_count = i;
                }
            }

            m_timer.Stop();//останавливаем таймер
            MessageBox.Show("end timer");
        }

    }
}

Еще один пример с остановкой потока

Показать »

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 WpfApplication3
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public
            int m_count;// переменная через которую мы обновляем поле
            System.Windows.Threading.DispatcherTimer m_timer;
            bool m_flag;

        //создаем объект для блокировки
        private
            Object m_thisLock = new Object();

        public MainWindow()
        {
            InitializeComponent();
            m_flag = true;
            m_count = 0;
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            //Создаем таймер через который будем обновлят TextBox
            m_timer = new System.Windows.Threading.DispatcherTimer();
            m_timer.Tick += new EventHandler(f_timer);//подписка на событие таймера
            m_timer.Interval = new TimeSpan(0, 0, 1);//интервал вызова таймера
            m_timer.Start();

            m_flag = true;//запускаем поток логически
            System.Threading.Thread t = new System.Threading.Thread(f_thread);
            t.IsBackground = true; //запрещаем поток в фоновом режиме
            t.Start();
        }

        private void f_timer(object sender, EventArgs e)
        {
            //обновляем TextBox
            textBox.Text = Convert.ToString(m_count, 10);
        }

        //функция потока
        private void f_thread()
        {
            //блокируем m_count
            lock (m_thisLock)
            {
                while (m_flag)
                {
                    //делаем задержку
                    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.1));

                    m_count++;
                }
            }

            m_timer.Stop();//останавливаем таймер
            MessageBox.Show("end potok");
        }

        //функция останавливает поток
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            m_flag = false;
        }
    }
}

Регулярные выражения

Показать »

Почитать можно тут.

//регулярное выражение
Regex regex = new Regex("Я фрилансер\s*</a>", RegexOptions.IgnoreCase);
Match match = regex.Match(text);//получаем все совпадения
if (match.Success)
{
    MessageBox.Show("naideno = "+match.Groups[0].Value+" g1= "+match.Groups[1].Value);
}
else
{
    MessageBox.Show("not found");
}

Динамические массивы ArrayList

Показать »

почитать можно тут.

ArrayList arr = new ArrayList();
arr.Add("hellow");
arr.Add(1);
arr.Add("0.100");

for(int i=0;i<arr.Count;i++)
{
     MessageBox.Show(arr[i].ToString());
}

Динамические массивы List – аналог vector в C++

Показать »

List<string> arr = new List<string>();
arr.Add("hellow");
arr.Add("1");
arr.Add("0.100");
arr[2] = "10";
           
for(int i=0;i<arr.Count;i++)
{
     MessageBox.Show(arr[i]);
}

Сделать кнопку неактивной и поля прокрутка вниз

Показать »

button1.IsEnabled = false;
textBox.IsEnabled = false;
textBox.ScrollToEnd();//прокрутка вниз

Изменить иконку

Показать »

Добавляем иконку в Проект -> Свойство

Screenshot_2Если не отображается, то можно добавить в коде

Icon="icontexto-inside-furl_5766.ico"

 

 

 

 

 

 

 

 

 

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *