2011-07-12 9 views
3

私は次のコードを使ってウィンドウをアニメーション化しています。 私のプログラムの視覚的な構造を少し説明しましょう。 Form1の上に1つのFlowLayoutPanelがあり、さらにFlowLayoutPanelの上にある多くのGroupBoxオブジェクトがあります。最後に、GroupBoxの上に1つのButtonとInvisible RichTextBoxオブジェクトがあります。C#WinForms AnimateWindowの問題

例:Form1-> FlowLayoutPanel-> GroupBox->ボタンとリッチテキストボックス(見えない)

私が達成しようとしている何が私はButtonオブジェクトをクリックすると、ですが、私は私のリッチテキストボックスが下方にスライドします。私は1つのボタンとRichTextBoxをメインフォームの上に作成してみましたが、それは完璧に機能しました。しかし、実行時にGroupBoxコントロールを使用して同じことを試みると、私のAnimate関数は未知の例外をスローします。

class Effects 
{ 
public enum Effect { Roll, Slide, Center, Blend } 

public static void Animate(Control ctl, Effect effect, int msec, int angle) 
{ 
    int flags = effmap[(int)effect]; 
    if (ctl.Visible) { flags |= 0x10000; angle += 180; } 
    else 
    { 
     if (ctl.TopLevelControl == ctl) flags |= 0x20000; 
     else if (effect == Effect.Blend) throw new ArgumentException(); 
    } 
    flags |= dirmap[(angle % 360)/45]; 
    bool ok = AnimateWindow(ctl.Handle, msec, flags); 
    if (!ok) throw new Exception("Animation failed"); 
    ctl.Visible = !ctl.Visible; 
} 

private static int[] dirmap = { 1, 5, 4, 6, 2, 10, 8, 9 }; 
private static int[] effmap = { 0, 0x40000, 0x10, 0x80000 }; 

[DllImport("user32.dll")] 
public static extern bool AnimateWindow(IntPtr handle, int msec, int flags); 
} 

また、私は、リッチテキストボックスの親 例えばEffects.Animate(textBox.parent、Effects.Effect.Slide、150、90)を使用して、アニメーション関数を呼び出すときことに気づきました。

アニメーションは問題なく動作します。 私はそれが実際のオブジェクトではなく親で動作する理由はわかりません。 例:Effects.Animate(textBox、Effects.Effect.Slide、150、90);

+0

StackExchangeサイトでは、アトリビューションが必要です。 –

+0

@ HansPassant * "AttributionはStackExchangeサイトで必要です。"属性を追加しますか? 'DllImport'? 「StackExchangeサイトでは、期限が切れる場所でクレジットを与える必要がありますが、「AttributionはStackExchangeサイトで必要です」とは言いません。おそらくそれは誤翻訳ですか? –

+1

これは@HansPassantによって以前に投稿されたコードです。 http://stackoverflow.com/a/6103677/98422を参照してください。私はこれが彼のコメントが暗示していたと思います。 –

答えて

2

私はあなたのコードをテストし、テキストボックスでも機能します(richtextboxでも動作しますが、黒色になり、元の色に戻った領域のみ)。

このコードを実行するコントロールは、エフェクト関数が呼び出される前に、で非表示にする必要があります。たとえば、私はEffects.Animate(textBox1、Effects.Effect.Center、1000、120)を呼び出しました。デザイナでtextBox1.Visibleがfalseに設定されていました。

ビジェイ

関連する問題