Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2014, 17:29   #1
JunkieBeat
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 38
По умолчанию Установить событие на ЛКМ

Доброго времени суток.
Делаю объект (панель) при наведение на которую появляться дополнительные кнопки (в самой панели) , а исчезать они должны когда мышь уходит за границы панели или пользователь нажимает на ЛКМ.
Если делать это на событиях MouseEnter и MouseLeave то проблемы в том что при наведение на кнопки у панели срабатывает лив. Делать какие то прозрачные панели что бы они ловили клик не охота, так как считаю что можно что то поэлегантней сделать.
И вот непосредственно вопрос можно ли установить событие на ЛКМ?Работаю на VS2010 WPF.
Знаю что можно хуками организовать такое событие, но может есть и другой вариант? Или же есть события компонентов которые подходят для решения данной задачи лучше чем Интер и Лив?
JunkieBeat вне форума Ответить с цитированием
Старый 08.12.2014, 17:46   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что-то не очень понял что вы хотите. Покажите код какой-нибудь что ли.
Как тут прозрачная панель может помочь?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.12.2014, 17:53   #3
JunkieBeat
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 38
По умолчанию

Код:
private void Img_MouseEnter(object sender, MouseEventArgs e)
        {
            edit.Visibility = Visibility.Visible;
        }

        private void Img_MouseLeave(object sender, MouseEventArgs e)
        {
            edit.Visibility = Visibility.Hidden;
        }
Тоесть я навожу на картинку появляется нужный мне едит, но как только я навожу на едит что бы ввести туда текст, у картинки срабатывает второе событие и едит исчезает. А надо сделать так что бы исчезал он когда я выхожу за границы картинки (Edit находиться на картинке)
JunkieBeat вне форума Ответить с цитированием
Старый 08.12.2014, 18:42   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Потому что картинка это не панель.

А вот если бы это был Grid, StackPanel и т.п., то там бы MouseLeave не срабатывал при наведении на ее элементы.

Картинку на фон можно поставить с помощью ImageBrush.

Код:
<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="500" Width="600">
    <Grid>
        <Grid Height="300" Width="300" MouseEnter="Grid_MouseEnter" MouseLeave="Grid_MouseLeave">
            <Grid.Background>
                <ImageBrush ImageSource="http://i.imgur.com/SpCbHBI.jpg"/>
            </Grid.Background>
            <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Height="23" Width="250" Visibility="Hidden" Name="tbox" />
        </Grid>
    </Grid>
</Window>
Код:
        private void Grid_MouseEnter(object sender, MouseEventArgs e)
        {
            tbox.Visibility = Visibility.Visible;
        }

        private void Grid_MouseLeave(object sender, MouseEventArgs e)
        {
            tbox.Visibility = Visibility.Hidden;
        }
А еще лучше без событий, а с тригерами как-то так:
Код:
<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="500" Width="600">
    <Grid>
        <Grid Height="300" Width="300" Name="myGrid">
            <Grid.Background>
                <ImageBrush ImageSource="http://i.imgur.com/SpCbHBI.jpg"/>
            </Grid.Background>
            
            <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
                <StackPanel.Style>
                    <Style>
                        <Setter Property="Panel.Visibility" Value="Hidden"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=myGrid, Path=IsMouseOver}" Value="True">
                                <Setter Property="Panel.Visibility" Value="Visible" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </StackPanel.Style>

                <TextBox Margin="3" Width="200"/>
                <Button Margin="3" Padding="10,0" Content="Click"/>
            </StackPanel>
        </Grid>
    </Grid>
</Window>
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 08.12.2014 в 18:46.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция нажатия ЛКМ в приложении под мышкой Illusiony Общие вопросы Delphi 4 09.05.2014 16:37
Передача нажатия ЛКМ в другое окно Kazik Общие вопросы Delphi 4 18.04.2013 01:16
автоматическое нажатие ЛКМ zlobagi Общие вопросы C/C++ 1 29.12.2011 22:07
Случайное нажатие ЛКМ Mixasik Свободное общение 20 18.08.2010 15:59
Перехват нажатия ЛКМ [Delphi/Hooks] anGeee Win Api 1 07.12.2009 00:58