Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
802 / 565 / 73
Регистрация: 10.03.2012
Сообщений: 4,005
1

Выполнение события только один раз

20.12.2014, 12:24. Показов 2407. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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.Media;
 
namespace WpfApplication3
{
    public class Event
    {
        public bool flag = true;
        public bool fl = true;
        Grid grd= new Grid();
        StackPanel sp= new StackPanel();
        Border bor = new Border();
        Button button1 = new Button();
        Button button2 = new Button();
        TextBlock tb = new TextBlock();
        public event EventHandler OnDone;
        private void OnSomeDone(EventArgs e)
        {
            EventHandler handler = OnDone;
            if (OnDone != null)
            {
                handler(this, EventArgs.Empty);
            }
        }
 
        public void Inform(string msg)
        {
            grd.Visibility = Visibility.Visible;
            
            sp.Orientation = Orientation.Horizontal;
            sp.Margin = new Thickness(10, 10, 10, 10);
            sp.Opacity = 1;
            sp.Background = Brushes.Orange;
 
            bor.Background = Brushes.Black;
            bor.BorderThickness = new Thickness(2, 0, 0, 0);
            bor.Background = Brushes.Orange;
            bor.Margin = new Thickness(0, 0, 0, 0);
            bor.Opacity = 0.5;
 
            
            button1.Content = "Button 1";
            button1.Width = 70;
            button1.Height = 40;
            button1.VerticalAlignment = VerticalAlignment.Top;
            button1.Margin = new Thickness(150, 240, 0, 0);
            button1.Click += new RoutedEventHandler(Click1);
 
           
            button2.Content = "Button 2";
            button2.Width = 70;
            button2.Height = 40;
            button2.VerticalAlignment = VerticalAlignment.Top;
            button2.Margin = new Thickness(10, 240, 0, 0);
            button2.Click += new RoutedEventHandler(Click2);
           
            grd.Visibility = Visibility.Visible;
 
            tb.Width = 180;
            tb.Height = 90;
            tb.Margin = new Thickness(-160, 100, 40, 0);
            tb.TextAlignment = TextAlignment.Center;
            tb.TextWrapping = TextWrapping.Wrap;
            tb.Text = msg;
 
           if (fl == true)
           {
               fl = false;
               obj.MainGrid.Children.Add(grd);
               grd.Children.Add(sp);
               grd.Children.Add(bor);
               grd.Children.Add(button1);
               grd.Children.Add(button2);
               grd.Children.Add(tb);
           }
        }
 
        public Event(MainWindow mw)
        {
            obj = mw;
 
            OnDone += Click1;
            OnDone += Click2;
        }
 
        public MainWindow obj { get; set; }
 
        private void Click1(object sender, EventArgs e)
        {
            if (flag == true)
            {
                flag = false;
                OnSomeDone(EventArgs.Empty);
                flag = true;
                obj.tb_Infotext.Clear();
                MessageBox.Show("Кнопка 1 была нажата.");
                sp.Children.Remove(tb);
            }
 
            grd.Visibility = Visibility.Collapsed;
           
        }
 
        private void Click2(object sender, EventArgs e)
        {
            if (flag == true)
            {
                flag = false;
                OnSomeDone(EventArgs.Empty);
                flag = true;
                obj.tb_Infotext.Clear();
                MessageBox.Show(Кнопка 2 была нажата.");
                sp.Children.Remove(tb);
            }
            grd.Visibility = Visibility.Collapsed;
        }
    }
}
Можете помочь по-другому записать это
C#
1
2
3
4
5
6
7
8
9
10
11
  
            if (fl == true)
           {
               fl = false;
               obj.MainGrid.Children.Add(grd);
               grd.Children.Add(sp);
               grd.Children.Add(bor);
               grd.Children.Add(button1);
               grd.Children.Add(button2);
               grd.Children.Add(tb);
           }
И как переделать, чтобы MessageBox.Show при повторном нажатии на кнопку не выводился, то есть event выполнялось один раз.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2014, 12:24
Ответы с готовыми решениями:

Проигрывание аудио только один раз
Всем привет, хочу в программе проиграть аудио только один раз. Как это сделать? P.S. когда делаю...

Функция выполняется только один раз в день
По заданию нужно сделать, чтобы заданная функция в коде выполнялась только один раз в день, как это...

Таймер вызывает событие только один раз
Доброго времени суток. Будтъте добры подскажите, затупил. Есть такой класс. Я его конструирую,...

Данные от сервера клиенту передаются только один раз
Я хочу постоянно передавать от сервера клиенту массив байт, но получается передать только 1 раз....

7
53 / 53 / 18
Регистрация: 26.07.2012
Сообщений: 188
20.12.2014, 13:22 2
что это за ад? что вы пытаетесь сделать? какова исходная задача ?
0
802 / 565 / 73
Регистрация: 10.03.2012
Сообщений: 4,005
20.12.2014, 18:17  [ТС] 3
Цитата Сообщение от monstrilla Посмотреть сообщение
какова исходная задача ?
По нажатию кнопки вызвать метод, который откроет панель на которой две кнопки и текст введенный в textbox перенесет в textblock, который расположен на открывшейся панели.
После этого по нажатию на одну из кнопок, выполнилось событие, оповещающее, что кнопка была нажата и панель закрылась.
0
53 / 53 / 18
Регистрация: 26.07.2012
Сообщений: 188
22.12.2014, 10:01 4
откроет панель
Имеется ввиду сделает панель видимой? Если да, то:

Зачем нужен класс Event? Зачем определять панель и ее содержимое в кодбехайнде? Почему не определить панель в кзамле и менять ей видимость.

Рекомендую имена полей писать так, чтоб они отличались от имен локальных переменных. Т.е. вместо

C#
1
Border bor = new Border();
C#
1
Border _bor = new Border();
Зачем цеплять на событие сразу 2 обработчика? Зачем 2 почти одинаковых обработчика? Зачем 2 кнопки, какой в них смысл? Не понятно. Такое ощущение, что вы перемудрили...

Добавлено через 48 минут
Рабочий код

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid Grid.Row="0">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBox Name="_textBox"
                    Margin="2"
                    HorizontalAlignment="Stretch">
        </TextBox>
        <Button Grid.Row="1" 
                Content="ShowPanel"
                Margin="2"
                Click="ShowPanelClick"></Button>
    </Grid>
        
    <Grid Grid.Row="1"
            Name="_grid"
            Margin="5"
            Visibility="Collapsed">
        <Border Background="Black" 
                BorderThickness="2,0,0,0" 
                BorderBrush="Orange" 
                Opacity="0.5">
            <StackPanel Orientation="Vertical">
                <TextBlock Height="90"
                            Name="_textBlock"
                            Margin="5"
                            Background="White"
                            TextAlignment="Center"
                            TextWrapping="Wrap"
                            HorizontalAlignment="Stretch">
                </TextBlock>
                <Button Width="70" 
                        Height="40" 
                        Content="Button1"
                        Margin="5"
                        VerticalAlignment="Top" 
                        Click="ButtonOneClick"/>
                <Button Width="70" 
                        Height="40"
                        Content="Button2"
                        Margin="5"
                        VerticalAlignment="Top" 
                        Click="ButtonTwoClick"/>
            </StackPanel>
        </Border>
    </Grid>
</Grid>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        DataContext = this;
    }
 
    private void ButtonOneClick(Object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Кнопка 1 была нажата");
        _textBox.Clear();
        _grid.Visibility = Visibility.Collapsed;
    }
 
    private void ButtonTwoClick(Object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Кнопка 2 была нажата");
        _textBox.Clear();
        _grid.Visibility = Visibility.Collapsed;
    }
 
    private void ShowPanelClick(Object sender, RoutedEventArgs e)
    {
        _textBlock.Text = _textBox.Text;
        _grid.Visibility = Visibility.Visible;
    }
}
0
802 / 565 / 73
Регистрация: 10.03.2012
Сообщений: 4,005
28.12.2014, 16:42  [ТС] 5
monstrilla, Спасибо, но я все-таки сделал так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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.Input;
using System.Windows.Media;
 
namespace WpfApplication3
{
    public class Event
    {
        bool flagButton1 = true;
        bool flagButton2 = true;
        bool bflag = true;
        Grid grd_InfoGrid = new Grid();
        StackPanel sp_Panel = new StackPanel();
        Border bor = new Border();
        Button button1 = new Button();
        Button button2 = new Button();
        TextBlock tb = new TextBlock();
        public event EventHandler OnDone;
 
        private void OnSomeDone()
        {
            EventHandler handler = OnDone;
            if (OnDone != null)
            {
                handler(this, EventArgs.Empty);
            }
        }
 
        public void Inform(string message)
        {
            grd_InfoGrid.Visibility = Visibility.Visible;
 
            sp_Panel.Orientation = Orientation.Horizontal;
            sp_Panel.Margin = new Thickness(10, 10, 10, 10);
            sp_Panel.Opacity = 1;
            sp_Panel.Background = Brushes.Orange;
 
            bor.BorderThickness = new Thickness(2, 0, 0, 0);
            bor.Background = Brushes.Orange;
            bor.Margin = new Thickness(0, 0, 0, 0);
            bor.Opacity = 0.5;
 
            button1.Content = "Button 1";
            button1.Name = "button1";
            button1.Width = 70;
            button1.Height = 40;
            button1.VerticalAlignment = VerticalAlignment.Top;
            button1.Margin = new Thickness(150, 240, 0, 0);
 
            button2.Content = "Button 2";
            button2.Width = 70;
            button2.Height = 40;
            button2.VerticalAlignment = VerticalAlignment.Top;
            button2.Margin = new Thickness(10, 240, 0, 0);
            button2.Name = "button2";
 
            grd_InfoGrid.Visibility = Visibility.Visible;
 
            tb.Width = 180;
            tb.Height = 90;
            tb.Margin = new Thickness(-160, 100, 40, 0);
            tb.TextAlignment = TextAlignment.Center;
            tb.TextWrapping = TextWrapping.Wrap;
            tb.Text = message;
            
            if (bflag == true)
            {
              bflag = false;
              Obj.MainGrid.Children.Add(grd_InfoGrid);
              grd_InfoGrid.Children.Add(sp_Panel);
              grd_InfoGrid.Children.Add(bor);
              grd_InfoGrid.Children.Add(button1);
              grd_InfoGrid.Children.Add(button2);
              grd_InfoGrid.Children.Add(tb);
            }
        }
 
        public Event(MainWindow mw)
        {
            Obj = mw;
            OnDone += Click1;
            OnDone += Click2;
            button1.Click += new RoutedEventHandler(Click1);
            button2.Click += new RoutedEventHandler(Click2);
        }
 
        private MainWindow Obj { get; set; }
 
        private void Click1(object sender, EventArgs e)
        {
            Button bt = sender as Button;
            if (bt != null)
            if ((bt).Name == "button1")
            {
                    if (flagButton1 == true)
                    {
                        OnSomeDone();                 
                        MessageBox.Show("Кнопка1 была нажата.");
                        flagButton1 = false;
                    }
                    Obj.tb_Infotext.Clear();
                    sp_Panel.Children.Remove(tb);
            }
            grd_InfoGrid.Visibility = Visibility.Collapsed;
        }
 
        private void Click2(object sender, EventArgs e)
        {
 
            Button bt = sender as Button;
 
            if (bt != null)
                if ((bt).Name == "button2")
                {
                    if (flagButton2 == true)
                    {
                        OnSomeDone();
                        MessageBox.Show("Кнопка2 была нажата.");
                        flagButton2 = false;
                    }
                    Obj.tb_Infotext.Clear();
                    sp_Panel.Children.Remove(tb);
                }
  
            grd_InfoGrid.Visibility = Visibility.Collapsed;
        }
    }
}
XML
1
2
3
4
5
6
7
8
9
10
<Window
        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" mc:Ignorable="d" x:Class="WpfApplication3.MainWindow"
        Title="MainWindow" Height="350" Width="525">
    <Grid x:Name="MainGrid">
        <Button Width="70"  Height="30"  Content="?" Click="Click" x:Name="bt"/>
        <TextBox Width="200" Height="20" Margin="0,70,0,0" x:Name="tb_Infotext"/>
    </Grid>
</Window>
0
53 / 53 / 18
Регистрация: 26.07.2012
Сообщений: 188
29.12.2014, 09:16 6
Ну, если вы считаете, что ваша реализация лучше...
0
802 / 565 / 73
Регистрация: 10.03.2012
Сообщений: 4,005
31.12.2014, 19:38  [ТС] 7
Ну и обработчики событий можно в один объединить
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private void Click_button(object sender, EventArgs e)
        {
            Button bt = sender as Button;
            if (bt != null)
                if ((bt).Name == "button1")
                {
                    if (flagButton1 == true)
                    {
                        OnSomeDone();
                        flagButton1 = false;
                    }
                    MessageBox.Show("Кнопка1 была нажата.");
                    sp_Panel.Children.Remove(Obj.tbc);
                    Obj.grid_UserInformer.Visibility = Visibility.Collapsed;
                }
 
                else if ((bt).Name == "button2")
                {
                    if (flagButton2 == true)
                    {
                        OnSomeDone();
                        flagButton2 = false;
                    }
                    MessageBox.Show("Кнопка2 была нажата.");
                    sp_Panel.Children.Remove(Obj.tbc);
                    Obj.grid_UserInformer.Visibility = Visibility.Collapsed;
                }
        }
0
53 / 53 / 18
Регистрация: 26.07.2012
Сообщений: 188
02.01.2015, 19:15 8
Invincible,

Какой в этом смысл? Чтоб потом писать вложенные ифы и путаться с флагами?
0
02.01.2015, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2015, 19:15
Помогаю со студенческими работами здесь

Dll-ка работает только один раз при каждом запуске программы
Здравствуйте. Есть файл .dll-ки, написанный на другом языке с несколькими известными...

Выполнение обработчика события один раз за определенное время
Здравствуйте! Подскажите, как сделать так, чтобы за определенный промежуток времени обработчик...

Код в обработке события получения фокуса, который бы исполнялся только один раз, при открытии формы
Здравствуйте! Подскажите пожалуйста, какими операторами воспользоваться, чтобы организовать...

Выполнение события 1 раз
Как выполнять событие только один раз? Например щелчок по элементу будет вызывать событие. я хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru