Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Как посмотреть события для кнопки


Автор: Lion_Smith 25.3.2008, 11:25
В VS 2008 я создал WPF проект на C#. Создал кнопку, открыл её свойства в окне Propertis и не обнаружил привычной кнопки с молниями для просмотра событий (Events), которые данная кнопка может генерировать. Меня это очень огорчило. Мне необходимо создать обработчик события  MouseLeftButtonDown. В таком же проекте на VB .Net найти события можно используя раскрывающиеся списки вверху окна с VB .Net кодом и двойным щелчком сгенерировать код нужного тебе события.
А что делать в C#? Двойной щелчёк по кнопке и это всё что дали нам разработчики в Microsoft? А как мне описать события MouseLeftButtonDown?

Автор: Lion_Smith 25.3.2008, 13:12
Неужели ни кто не знает? Пипец.. а как вы в VS 2008 программируите?? Или тут все такие мегамозги?

Автор: Dennnis 25.3.2008, 15:50
Или у тебя VS 2008 кривая или ты тупишь.

Автор: Lion_Smith 25.3.2008, 18:27
VS 2008 скачал из инета с официального сайта Майкрософт, буквально как только её выложили. Может месяца 2 назад, точно не помню!
В простом проекте WindowsForm у меня ни каких проблем нет. А вот в WPF проектах, которые используют фрэймворк 3.5 есть вот такое маленькое неудобство. Читал, где-то что для VS 2005 похожая проблема была, неужели не исправили до сих пор?

В файле приложении лежит снимок окна VS 2008

Автор: Dennnis 26.3.2008, 09:22
Извини, это я ступил smile 
Там реально только одно событие Click, и даже в Xaml'е ничего не пропишешь, если только сам не унаследуешь от System.Windows.Controls.Primitives.ButtonBase и не реализуешь OnMouseMove, OnKeyUp, или чё те надо smile 

Автор: Lion_Smith 28.3.2008, 12:57
Кароче, как было!  smile
Берём VS 2008! Создаём новый WPF проект (хоть оконный, хоть для браузера.. один хрен)!

Как известно технология WPF входит в состав FW 3.0 и выше.. и радует нас тем, что интерфейс (считай всё окно, контролы на этом окне, их способ окрашивания, анимация, расположение, и всякого рода активность/события и свойства, которые в обычном WinForm проекте описывались на C# в файле Form1.Designer.cs) описывается в Window1.xaml на специальном XML подобном языке ориентированном на дизайнера. А код пишется программистом в Window1.xaml.cs. На самом деле очень удобно! smile
Всё бы ни чего! И по уму сделано. Но так как технология сама по себе революционная, то приходится мириться с некоторыми (надеюсь временными) неудобствами.

В частности если раньше с событиями разбираться было просто выбрав в свойствах нужное нам и активировав его двойным щелчком, то теперь надо потратить время на то что бы написать шапку к событию иному чем простой клик, да и клик то иногда не так просто описать.

Вот простой пример:

В новом WPF проете закидываем на форму кнопку button1 и наблюдаем в XAML появление следующей строчки   <Button Height="23" Margin="237.5,133.75,306.25,0" Name="button1" VerticalAlignment="Top">Button</Button>:

Код

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="480" Width="640" Background="Transparent" WindowStyle = "None" AllowsTransparency="True" Loaded="Window_Loaded">
    <Grid>
        <Button Height="23" Margin="237.5,133.75,306.25,0" Name="button1" VerticalAlignment="Top">Button</Button>
</Grid>
    
</Window>



Привычно дважды щёлкаем по этой кнопке и в C# появляется:

Код


private void button1_Click_1(object sender, RoutedEventArgs e)
        {

        }



а если вернуться обратно в XAML, то мы заметим следующее изменение в описании кнопки:

Код

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="480" Width="640" Background="Transparent" WindowStyle = "None" AllowsTransparency="True" Loaded="Window_Loaded">
    <Grid>
         <Button Height="23" Margin="237.5,133.75,306.25,0" Name="button1" VerticalAlignment="Top" 

Click="button1_Click_1"


>Button</Button>

</Grid>
    
</Window>



Теперь мы знаем механизм добавления события к любому элементу WPF при его описании. Правда реализовывать этот механизм для любого другого события придётся ручками.. Гибкость на грани фантастики! Все говорим спасибо разработчикам в Microsoft! smile 

ПРОДОЛЖАЕМ:
Добавим на форму элемент Label и сделаем так, что бы можно было таскать форму за этот самый Label.

1) закидываем на форму Label и наблюдаем в XAML следующую строчку:
 
Код

        <Label Height="28" HorizontalAlignment="Right" Margin="0,177.5,150,0" Name="label1" VerticalAlignment="Top" Width="120">Label</Label>



в ручную добавлем к нему событие 

Код

        <Label Height="28" HorizontalAlignment="Right" Margin="0,177.5,150,0" Name="label1" VerticalAlignment="Top" 


MouseLeftButtonDown="MyCaptionLabel_MouseLeftButtonDown"

Width="120">Label</Label>



и так же в ручную в C# пишем обработчик события:

Код

private void MyCaptionLabel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }


Если не знаем как писать правильно обработчик для какого-нибудь события, то его можно создать в WinForms и потом Ctrl+C, Ctrl+V перенести в вашу программу.

Всё! Вот так теперь и выкручиваемся!  
  
PS: Для людей практикующих VB.Net таких сложностей нет. Там всё просто. Почему бы уже не скрестить функциональность окошка кодинга VB с окном кодинга C#, ведь так удобно было бы...

Добавлено через 1 минуту и 37 секунд
Вопрос решён!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)