コントロールの回転

タグの編集
投稿者 IsZako  (小学生) 投稿日時 2013/6/22 15:31:07
WinndowsFormアプリケーションでラベルなどをタイマーを使ってぐるぐる回転させたいのですが、
WPFでしかできません。WPFにはタイマーが無いので、うまくいきません。
投稿者 るきお  (社会人) 投稿日時 2013/6/22 21:26:32
コントロールをアニメーションで回転させる方法を知りたいということでしょうか?
>WPFでしかできません。WPFにはタイマーが無いので、うまくいきません。
できるけど、うまくいかないというところが特によくわかりません。
Windowsフォームで実現したいようにも感じますが、WPFでもよいということでしょうか?

何をやりたいのか具体的に書いてください。
また、既に試していることがあるようですので、その場合は試しているプログラムを載せてください。
プログラムを載せるのは、具体的なイメージを他の人に伝えるためと、第三者への情報提供の意味からです。うまく動かないプログラムも載せる価値はあります。
長すぎる場合には関連する部分を抜粋するなどしてください

やりたいことがよくわからないので、参考にWPFを使ってLabelをアニメーションで回転させる例を紹介します。
<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">

    <Grid>
        <Label x:Name="label" Height="100" Width="100" Content="test" Background="red">
            <Label.RenderTransform>
                <TransformGroup>
                    <RotateTransform x:Name="Rotation" CenterX="50" CenterY="50" />
                </TransformGroup>
            </Label.RenderTransform>
            <Label.Triggers>
                <EventTrigger RoutedEvent="Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation
                                Storyboard.TargetName="Rotation"
                                Storyboard.TargetProperty="Angle"
                                Duration="0:0:3" From="0" To="360"
                                RepeatBehavior="Forever"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Label.Triggers>
        </Label>
    </Grid>
</Window>


投稿者 IsZAko  (小学生) 投稿日時 2013/6/23 13:59:17
WPF でこのようにしたら、1回目はちゃんとかたむくのですが、2回目以降動作してくれません。

  Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        Dim a As Integer = 10
        Label1.RenderTransform = New RotateTransform(a)
        a = a + 10
    End Sub

Windowsフォームアプリケーションでやる方法をお願いします。
投稿者 ヴァン  (社会人) 投稿日時 2013/6/24 09:21:29
>WPF でこのようにしたら、1回目はちゃんとかたむくのですが、2回目以降動作してくれません。
プログラムではこう書かれています。
「ボタンを押されたら10(度)傾けて表示しなさい」
なので、これが正常動作だと思います。

最後の「a = a + 10」はローカル変数なので意味ないですね。

Windowsフォームで行う場合は自分で全てを Graphics に描画する必要があります。
投稿者 るきお  (社会人) 投稿日時 2013/6/24 20:56:56
>WPF でこのようにしたら、1回目はちゃんとかたむくのですが、2回目以降動作してくれません。
こういう話なら、次のようにaをイベントハンドらの外で宣言するのがもっとも簡単です。
Dim a As Integer = 10

Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)

    Label1.RenderTransform = New RotateTransform(a)
    a = a + 10
End Sub


IsZakoさんのプログラムだと ボタンがクリックされるたびに 変数a を作成するので 何度クリックしても a は初期値の 10 のままです。

>Windowsフォームアプリケーションでやる方法をお願いします。
コントロールを回転させるのはWPFの方が圧倒的に簡単です。
Windowsフォームではコントロールを回転することはできず、どうしてもそのようなことをしたい場合はヴァンさんが書いているように、コントロールのように見えるグラフィックを使ってそれを回転させることになります。