質問

コンパクトなフレームワークで素敵なフォームエフェクトを作成できるかどうかを知りたい。

私の計画では、ユーザーがメインフォームで画像を選択すると、これが新しいフォームで開かれますが、これは現在機能しています。ここでやりたいことは、フルサイズの画像を含むフォームを作成して、画面の端(左または右)から約4ピクセルの高さでロードしてから、スライドして表示することです。フォームが完全に画面に表示されたら、画面の最大値に達するまで高さを拡張します。

閉じるときに、フォームを破棄する前に、高さを4ピクセルの高さに戻し、エッジから再びスライドさせます。

フォームをインスタンス化する際に以下のコードを試しましたが、dp.Width == 240に関係なくdp.Topプロパティは常に0でした

DisplayPicture dp = new DisplayPicture(ImageUrl);
dp.WindowState = FormWindowState.Normal;
dp.Left = dp.Width * -1;
dp.Top = (dp.Height / 2) - 2;
dp.Height = 4;
dp.ShowDialog();       

DisplayPictureフォーム内には、フォームを移動しようとする次のものもありますが、Topプロパティを設定していないため、このコードはまだ重要ではありません。

void t_Tick(object sender, EventArgs e)
{
    if (this.Left < 0)
        this.Left += 5;

    if (this.Left > -1)
    {
        this.Left = 0;
        if (this.Height < pictureBox1.ClientRectangle.Height)
        {
            this.Height += 4;
            this.Top -= 2;
        }

        if ((this.Left == 0) && (this.Top == 0))
            t.Enabled = false;

    }
}

ご協力いただければ幸いです!

TIA

ワンショット

役に立ちましたか?

解決

これを行うには、画像を読み込んだPictureBoxコントロールから始めます。 Heightを4、Widthをフォームの幅に設定し、(非常に重要)PictureBoxの SizeMode StretchImage に設定します。

次に、Topを0に、Leftを-Widthに設定して、PictureBoxを画面外に配置します。 100(または何でも)の間隔でフォームにタイマーコントロールを配置し、Leftプロパティが0になるまでイベントがPictureBoxを徐々に右に移動するようにします。そのポイントに達したら、タイマーイベントでHeightを徐々に増やしますフォームの高さに達します。

おそらくちらつきに対処する必要がありますが、これで開始できます。

更新:あなたの質問をもう少し詳しく読んだところ、フォーム自体をオフスクリーンからフルスクリーンに実際に移動したいことがわかりました。これは、フォーム全体(上部のタイトルバーを含む)をこのようにアニメーション化する場合は不可能ですが、フォームのFormBorderStyleを設定することでこれを行うことができます(またはコンパクトフレームワークではBorderStyleと呼ばれます)なし。 BorderStyleをNoneに設定すると、Height、Width、Top、Leftプロパティを変更すると、実際にフォームに目に見える効果があります(ただし、フォームはボーダーレスになります)。 これらのプロパティは、それ以外の場合はWindows Mobileで完全に無視されます。これが、おそらくコードが何もしていないように見えた理由です。

更新2:ここに私の答え同様のWMの質問。これは、アニメーション化されたウィンドウを実際のウィンドウのように見せることに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top