2

ボタンのクリックでフォームのサイズを変更したかったので、小さなアニメーションのように見せたかったので、このコードが役に立ちました

while (desiredWidht < this.Width)
{
    this.Width += 5;                    
    Thread.Sleep(4);
}

しかし、1 つ問題があります。このコードはフォームを正しい方向に展開します。左方向に同じことを行うにはどうすればよいですか..フォームを拡張してから左に移動し、すべてのコントロールを右に移動しようとしましたが、フォームが特定の幅に達した後、何らかの理由でコントロールが消え、拡張メソッドが実行されると問題が発生しました彼らは再び現れました。何が問題なのかわかりません。私がこれを行う適切な方法は何ですか。

4

2 に答える 2

0
const int MAX_STEP = 5;

while (Width < desiredWidth)
{
    int step = Math.Min(MAX_STEP, desiredWidth - Width);
    SetBounds(Left - step, Top, Width + step, Height);
    Refresh();
    Application.DoEvents();
    Thread.Sleep(4);
}

ここでは、いくつかのことを行いました。最初に、最大ステップを定義し、ステップを設定して、希望する正確な幅が得られるようにしました。ここでの回答からの大きな変化は、すべてのプロパティをアトミックに設定する SetBounds でした。サンプル プログラムでは他に何もしていなかったので、幅を設定していたときに右側のギッターが戻ってフォームが表示されていました。左 (以前はソリューションのテスト時)。おそらく他のプロセスでこれを持っているので、イベント Application.DoEvents() を発生させる必要があります。@banana で述べたように、Refresh() を実行できます。これは自動的に呼び出されるはずですが、再度呼び出しても問題ありません。 . また、Width の綴りを desiredWidth に正しく書きました。「this.Property」または「this.Method」は「this」の冗長な修飾子です

**注意してください。ClientSize.Width を調べてください。これは通常、人々が必要とするものです。SetDesktopBounds も調べる必要がある場合があります。

于 2013-02-17T16:20:19.407 に答える
0

試す -

this.Refresh();

コントロールを動かした後。

于 2013-02-17T15:15:51.747 に答える