none
Количество открываемых окон. RRS feed

  • Вопрос

  • Здравствуйте. Подскажите как прописать в WPF C# чтоб от кнопки можно было открывать заданное количество окон, например только 4 окна. Сейчас от кнопки открывается сколько угодно окон. Как ограничить количество их.

     

     

    private void button7_Click(object sender, RoutedEventArgs e)

            {

                Window2 wnd2 = new Window2();

                wnd2.Owner = this;

                wnd2.Show();   

            }

     


    • Изменено Aleksey-T 7 ноября 2011 г. 10:11
    7 ноября 2011 г. 10:10

Ответы

  • > Подскажите как прописать в WPF C# чтоб от кнопки можно было открывать заданное количество окон, например только 4 окна.
     
     
    <Window x:Class="WpfApplication5.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication5"
            Title="MainWindow" Height="350" Width="525">
        <Button Content="open" Click="Button_Click" HorizontalAlignment="Left" />
    </Window>
    
    using System.Windows;
    using System.Windows.Controls;
    
    namespace WpfApplication5
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                if (Application.Current.Windows.Count <= 4)
                {
                    var w = new Window();
                    w.Owner = this;
                    w.Show();
                }
            }
        }
    }
    
    

     
    для WinForms так:
      

    using System.Windows.Forms;
    
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                var b = new Button() { Text = "open", Parent = this };
                b.Click += (s, e) =>
                {
                    if (Application.OpenForms.Count <= 4)
                    {
                        var f = new Form();
                        f.Owner = this;
                        f.Show();
                    }
                };
            }
        }
    }
    
    • Изменено Malobukv 7 ноября 2011 г. 15:02
    • Предложено в качестве ответа Malobukv 7 ноября 2011 г. 15:39
    • Помечено в качестве ответа Abolmasov Dmitry 8 ноября 2011 г. 6:21
    7 ноября 2011 г. 15:01

Все ответы

  • > Сейчас от кнопки открывается сколько угодно окон. Как ограничить количество их.

    int count = 0;
    private void button7_Click(object sender, RoutedEventArgs e)
    {
        if (count++ < 4)
        {
            Window2 wnd2 = new Window2();
            wnd2.Owner = this;
            wnd2.Show();
        }
    }
    

    7 ноября 2011 г. 10:38
  • Спасибо.  В этом варианте открывается 4 окна не только количество штук, а  всего позволяет открывать только 4 раза т.е. после того как я открыл 4 окна и закрыл хоть одно из них, повторно уже не получается открыть ещё окно от этой кнопки.

    Так же уточню ещё, из главного окна  можно открывать два разных окна, но одно окно нужно максимум 1 или 4 штук, а второе 1 или 2 штуки.  

     

     

     // Открытие окна, не больше 4 штук.

            private void button7_Click(object sender, RoutedEventArgs e)

            {

                {

                    Window2 wnd2 = new Window2();

                    wnd2.Owner = this;

                    wnd2.Show();

                }

     

            }

            // Открытие окна, не больше 2 штуки.

            int count = 0;

            private void button6_Click(object sender, RoutedEventArgs e)

            {

                if (count++ < 2)// Не даёт повторно открыть окна если ещё оно понадобилось

                {

                    Window5 wnd5 = new Window5();

                    wnd5.Owner = this;

                    wnd5.Show();

                }

            }   

     


    • Изменено Aleksey-T 7 ноября 2011 г. 13:17
    7 ноября 2011 г. 13:16
  • Подпишитесь на событие закрытия окна:

            private int count = 0;
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                if (count >= 4)
                    return;
    
                count++;
                Window1 w1 = new Window1();
                w1.Owner = this;
                w1.Closed += new EventHandler((s, e2) => count--);
                w1.Show();
            }
    

     


    Для связи [mail]
    7 ноября 2011 г. 13:42
  • > позволяет открывать только 4 раза т.е. после того как я открыл 4 окна и закрыл хоть одно из них, повторно уже не получается открыть ещё окно от этой кнопки.


    в обработчике кнопки можно получить все окна. проверяйте количество, и какие именно открыты.

    var all = Application.Current.Windows;
    

    7 ноября 2011 г. 13:45
  • Большое спасибо всем, всё замечательно работает, вот результат для двух окон. 

     

            // Открытие окна, не больше 4 штук.

            private int count = 0;

            private int count1 = 0;

            private void button7_Click(object sender, RoutedEventArgs e)

            {

                {

                    if (count1 >= 4)

                        return;

     

                    count1++;

                    Window2 w2 = new Window2();

                    w2.Owner = this;

                    w2.Closed += new EventHandler((s, e2) => count1--);

                    w2.Show();

                }

            }

            // Открытие окна, не больше 2 штуки.

            private void button6_Click(object sender, RoutedEventArgs e)

            {

                {

                    if (count >= 2)

                        return;

     

                    count++;

                    Window5 w5 = new Window5();

                    w5.Owner = this;

                    w5.Closed += new EventHandler((s, e2) => count--);

                    w5.Show();

                }

            }   

     

     

    7 ноября 2011 г. 14:25
  • > Подскажите как прописать в WPF C# чтоб от кнопки можно было открывать заданное количество окон, например только 4 окна.
     
     
    <Window x:Class="WpfApplication5.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:WpfApplication5"
            Title="MainWindow" Height="350" Width="525">
        <Button Content="open" Click="Button_Click" HorizontalAlignment="Left" />
    </Window>
    
    using System.Windows;
    using System.Windows.Controls;
    
    namespace WpfApplication5
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                if (Application.Current.Windows.Count <= 4)
                {
                    var w = new Window();
                    w.Owner = this;
                    w.Show();
                }
            }
        }
    }
    
    

     
    для WinForms так:
      

    using System.Windows.Forms;
    
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                var b = new Button() { Text = "open", Parent = this };
                b.Click += (s, e) =>
                {
                    if (Application.OpenForms.Count <= 4)
                    {
                        var f = new Form();
                        f.Owner = this;
                        f.Show();
                    }
                };
            }
        }
    }
    
    • Изменено Malobukv 7 ноября 2011 г. 15:02
    • Предложено в качестве ответа Malobukv 7 ноября 2011 г. 15:39
    • Помечено в качестве ответа Abolmasov Dmitry 8 ноября 2011 г. 6:21
    7 ноября 2011 г. 15:01
  • Спасибо огромное, ещё более универсальный вариант этот.
    7 ноября 2011 г. 15:24