Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
Micro
43 / 43 / 1
Регистрация: 12.11.2011
Сообщений: 432
#1

Отрисовка кнопки - C#

15.04.2013, 00:03. Просмотров 737. Ответов 6
Метки нет (Все метки)

Сделал небольшую отрисовку кнрпочки. Кнопка плавно перетекает из темного в светлое состояние (когда наводится мышь), и налборот. Но вот проблема с надписью: она постоянно мерцает. Вот алгоритм из таймера:
Если мышка наведена то пиксель++ иначе пиксель--
Отрисовка рамки
Заполнение внутри рамки
Отрисовка строки
Как избавиться от мерциния?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 00:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отрисовка кнопки (C#):

При нажатии правой кнопки мыши на форме с нее удаляются все кнопки - C#
Написать программу, динамически порождающую на окне кнопки или метки. Левый верхний угол элемента управления определяется местоположением...

При нажатии правой кнопки мыши на форме с нее удаляются все кнопки - C#
Написать программу, динамически порождающую на окне кнопки или метки. Левый верхний угол элемента управления определяется местоположением...

Отрисовка линии - C#
Вот значит сижу и туплю, а проблема то легко решаемая... Так вот, поковырялся в msdn, и не получается всё равно... Нужно нарисовать...

Отрисовка окна(C#) - C#
Здравствуйте! столкнулся с такой проблемой, использую код private void Form1_Paint(object sender, PaintEventArgs e) { ...

Отрисовка матрицы - C#
Как в винформах отрисовать матрицу? Добавлено через 1 час 57 минут не могу понять как

Отрисовка на форме - C#
Добрый день! рисую на форме вот что получается: Сам код: protected override void OnPaint(PaintEventArgs pea) { ...

6
BeBrave
-248 / 28 / 1
Регистрация: 04.04.2013
Сообщений: 282
15.04.2013, 13:58 #2
мерцает из-за обновления...
избавится - под кнопку подложить пиктур бокс и на нем уже делать мерцание, а кнопку в флат с прозрачностью
0
phantom96
MЫW
124 / 109 / 1
Регистрация: 15.02.2013
Сообщений: 538
15.04.2013, 20:24 #3
А лучше wpf для такого использовать...
0
Micro
43 / 43 / 1
Регистрация: 12.11.2011
Сообщений: 432
17.04.2013, 13:17  [ТС] #4
Цитата Сообщение от phantom96 Посмотреть сообщение
А лучше wpf для такого использовать...
Можно примерчик? Просто не сталкивался еще с wpf
0
phantom96
MЫW
124 / 109 / 1
Регистрация: 15.02.2013
Сообщений: 538
18.04.2013, 15:19 #5
м. Вообщем создадите впф проект, налепите кнопку. А в app.xaml добавите:
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
<GradientStopCollection x:Key="MyGlassGradientStopsResource">
            <GradientStop Color="WhiteSmoke" Offset="0.2" />
            <GradientStop Color="Transparent" Offset="1" />
        </GradientStopCollection>
 
        <LinearGradientBrush x:Key="MyGlassBrushResource" 
   StartPoint="0,0" EndPoint="1,1" Opacity="0.75" 
   GradientStops="{StaticResource MyGlassGradientStopsResource}" />
 
        <LinearGradientBrush x:Key="GrayGradientBrush" 
    StartPoint="0.5,0" EndPoint="0.5,1">
            <GradientStop Color="#FF1F1F1F" Offset="0.15" />
            <GradientStop Color="#FF323232" Offset="1.0" />
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="GrayBlackGradientBrush" StartPoint="0.5,0" EndPoint="0.5,1">
            <GradientStop Color="#FF1F1F1F" Offset="0.15" />
            <GradientStop Color="Black" Offset="1.0" />
        </LinearGradientBrush>
 
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="#FF515151" />
            <Setter Property="Width" Value="80" />
            <Setter Property="Margin" Value="10" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" ClipToBounds="True">
 
                            <!-- Outer Rectangle with rounded corners. -->
                            <Rectangle x:Name="outerRectangle" HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" Stroke="{TemplateBinding Background}" 
      RadiusX="2" RadiusY="2" StrokeThickness="1" Fill="{StaticResource GrayGradientBrush}" />
                            <DockPanel x:Name="myContentPresenterDockPanel">
                                <ContentPresenter x:Name="myContentPresenter" Margin="4" Content="{TemplateBinding Content}" TextBlock.Foreground="#FFB2B2B2" />
                            </DockPanel>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True"/>
                            <Trigger Property="IsPressed" Value="True">
                                <!--<Setter Property ="Rectangle.Fill" TargetName="outerRectangle" Value="{DynamicResource GrayBlackGradientBrush}" /-->
                                <Trigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <ColorAnimationUsingKeyFrames Storyboard.TargetName="outerRectangle" Storyboard.TargetProperty ="(Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)">
                                                <LinearColorKeyFrame KeyTime="0:0:0.15" Value="Black"/>
                                            </ColorAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </Trigger.EnterActions>
                                <Trigger.ExitActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <ColorAnimationUsingKeyFrames Storyboard.TargetName="outerRectangle" Storyboard.TargetProperty ="(Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)">
                                                <LinearColorKeyFrame KeyTime="0:0:0.15" Value="#FF323232"/>
                                            </ColorAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </Trigger.ExitActions>
                            </Trigger>
                            <Trigger Property="IsFocused" Value="true"/>
                            <EventTrigger RoutedEvent="Mouse.MouseEnter">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
                                            <LinearColorKeyFrame KeyTime="0:0:0.3" Value="White"/>
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                            <EventTrigger RoutedEvent="Mouse.MouseLeave">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
                                            <LinearColorKeyFrame KeyTime="0:0:0.3" Value="#FF515151"/>
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                            <EventTrigger RoutedEvent="ButtonBase.Click">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <!--<ColorAnimationUsingKeyFrames Storyboard.TargetName="outerRectangle" Storyboard.TargetProperty ="(Fill).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)">
                                                <LinearColorKeyFrame KeyTime="0:0:0.1" Value="Black"/>
                                                <LinearColorKeyFrame KeyTime="0:0:0.2" Value="#FF323232"/>
                                            </ColorAnimationUsingKeyFrames>-->
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="StyleClose" TargetType="{x:Type Image}">
            <Setter Property="FlowDirection" Value="LeftToRight"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="False">
                    <Setter Property="Source" Value="Resources/close.png"/>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Source" Value="Resources/CloseActive.png" />
                </Trigger>
            </Style.Triggers>
        </Style>
внутрь <application.resources>
1
Micro
43 / 43 / 1
Регистрация: 12.11.2011
Сообщений: 432
20.04.2013, 01:30  [ТС] #6
Сделал по-своему) теперь буду на WPF такие компоненты делать, благодарю за подсказку

Добавлено через 19 минут
Вот собственно вопрос:
У меня проект на C#. Я добавил WPF Компонент, накидал там нужное мне
C#
1
2
3
4
5
6
7
8
9
10
11
12
<UserControl x:Class="CustomDraw.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Rectangle x:Name="box" Fill="#FF252525" HorizontalAlignment="Left" Height="59" Margin="10,10,0,0" Stroke="#FF404040" VerticalAlignment="Top" Width="150" MouseEnter="Rectangle_MouseEnter_1" MouseLeave="Rectangle_MouseLeave_1" MouseDown="box_MouseDown" MouseUp="box_MouseUp" Cursor="Hand"/>
        <Label Content="Label" HorizontalAlignment="Left" Height="29" Margin="59,25,0,0" VerticalAlignment="Top" Width="70" MouseEnter="Rectangle_MouseEnter_1" MouseLeave="Rectangle_MouseLeave_1" MouseDown="box_MouseDown" MouseUp="box_MouseUp" Cursor="Hand"/>
    </Grid>
</UserControl>
В студии настроено авто-пополнение компонентов. Кидаю на форму свою этот компонент, и собственно сам вопрос: как сделать там событие по клику на мою кнопку?
0
phantom96
MЫW
124 / 109 / 1
Регистрация: 15.02.2013
Сообщений: 538
20.04.2013, 12:10 #7
Посмотрите
http://www.youtube.com/watch?v=vfxMoyy2D1k

Добавлено через 3 минуты
Если у вас ещё не совсем большой проект его лучше сделать заного на впф. Это упростит в будущем такие моменты. А если уж совсем приспичит контрол из винформы вытащить то хост всегда есть.
0
20.04.2013, 12:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 12:10
Привет! Вот еще темы с ответами:

Отрисовка ScrollBar - C#
Вешаю скролл на панель,предопределаю onPain e.Graphics.Clear(Color.Blue); Закрашивает только область под элементами управления...

Отрисовка параболы - C#
Каким образом можно организовать отрисовку параболы, используя расстояние от фокуса до директрисы? Т.е. изменяя его, когда это нужно, чтобы...

.NET 4.x Отрисовка picturebox - C#
У меня есть 5 picturebox , которые изначательно невидимые (visible - false) . В течении программы некоторые появляются , появляются без...

DataGridView отрисовка. - C#
Доброе утро, форумчане. :) У меня вопрос по отрисовке DataGridView. DataGridView1.DataSource = ds.Tables(&quot;r_rec_group&quot;) Записей...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.